diff --git a/src/dolphincontextmenu.h b/src/dolphincontextmenu.h --- a/src/dolphincontextmenu.h +++ b/src/dolphincontextmenu.h @@ -116,6 +116,11 @@ KFileItem baseFileItem(); /** + * Adds "Open With" actions + */ + void addOpenWithActions(KFileItemActions& fileItemActions); + + /** * Adds actions that have been installed as service-menu. * (see http://techbase.kde.org/index.php?title=Development/Tutorials/Creating_Konqueror_Service_Menus) */ diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp --- a/src/dolphincontextmenu.cpp +++ b/src/dolphincontextmenu.cpp @@ -192,13 +192,28 @@ QAction* addToPlacesAction = nullptr; const KFileItemListProperties& selectedItemsProps = selectedItemsProperties(); + KFileItemActions fileItemActions; + fileItemActions.setItemListProperties(selectedItemsProps); + if (m_selectedItems.count() == 1) { - if (m_fileInfo.isLink()) { - addAction(m_mainWindow->actionCollection()->action(QStringLiteral("show_target"))); - addSeparator(); - } if (m_fileInfo.isDir()) { - // setup 'Create New' menu + // insert 'Open in new window' and 'Open in new tab' entries + addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_window"))); + addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_tab"))); + + // Insert 'Open With' entries + addOpenWithActions(fileItemActions); + + // insert 'Add to Places' entry + if (!placeExists(m_fileInfo.url())) { + addToPlacesAction = addAction(QIcon::fromTheme(QStringLiteral("bookmark-new")), + i18nc("@action:inmenu Add selected folder to places", + "Add to Places")); + } + + addSeparator(); + + // set up 'Create New' menu DolphinNewFileMenu* newFileMenu = new DolphinNewFileMenu(m_mainWindow->actionCollection(), m_mainWindow); const DolphinView* view = m_mainWindow->activeViewContainer()->view(); newFileMenu->setViewShowsHiddenFiles(view->hiddenFilesShown()); @@ -212,18 +227,6 @@ menu->setTitle(i18nc("@title:menu Create new folder, file, link, etc.", "Create New")); menu->setIcon(QIcon::fromTheme(QStringLiteral("document-new"))); addMenu(menu); - addSeparator(); - - // insert 'Open in new window' and 'Open in new tab' entries - addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_window"))); - addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_tab"))); - - // insert 'Add to Places' entry - if (!placeExists(m_fileInfo.url())) { - addToPlacesAction = addAction(QIcon::fromTheme(QStringLiteral("bookmark-new")), - i18nc("@action:inmenu Add selected folder to places", - "Add to Places")); - } addSeparator(); } else if (m_baseUrl.scheme().contains(QStringLiteral("search")) || m_baseUrl.scheme().contains(QStringLiteral("timeline"))) { @@ -247,11 +250,21 @@ addSeparator(); } else if (!DolphinView::openItemAsFolderUrl(m_fileInfo).isEmpty()) { + // Insert 'Open With" entries + addOpenWithActions(fileItemActions); + // insert 'Open in new window' and 'Open in new tab' entries addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_window"))); addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_tab"))); addSeparator(); + } else { + // Insert 'Open With" entries + addOpenWithActions(fileItemActions); + } + if (m_fileInfo.isLink()) { + addAction(m_mainWindow->actionCollection()->action(QStringLiteral("show_target"))); + addSeparator(); } } else { bool selectionHasOnlyDirs = true; @@ -266,16 +279,15 @@ if (selectionHasOnlyDirs) { // insert 'Open in new tab' entry addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_tabs"))); - addSeparator(); } + // Insert 'Open With" entries + addOpenWithActions(fileItemActions); } insertDefaultItemActions(selectedItemsProps); addSeparator(); - KFileItemActions fileItemActions; - fileItemActions.setItemListProperties(selectedItemsProps); addServiceActions(fileItemActions); fileItemActions.addPluginActionsTo(this); @@ -324,6 +336,12 @@ addMenu(newFileMenu->menu()); addSeparator(); + // Insert 'Open With' entries + const KFileItemListProperties baseUrlProperties(KFileItemList() << baseFileItem()); + KFileItemActions fileItemActions; + fileItemActions.setItemListProperties(baseUrlProperties); + addOpenWithActions(fileItemActions); + // Insert 'New Window' and 'New Tab' entries. Don't use "open_in_new_window" and // "open_in_new_tab" here, as the current selection should get ignored. addAction(m_mainWindow->actionCollection()->action(QStringLiteral("new_window"))); @@ -343,9 +361,6 @@ addSeparator(); // Insert service actions - const KFileItemListProperties baseUrlProperties(KFileItemList() << baseFileItem()); - KFileItemActions fileItemActions; - fileItemActions.setItemListProperties(baseUrlProperties); addServiceActions(fileItemActions); fileItemActions.addPluginActionsTo(this); @@ -469,12 +484,17 @@ return *m_baseFileItem; } -void DolphinContextMenu::addServiceActions(KFileItemActions& fileItemActions) +void DolphinContextMenu::addOpenWithActions(KFileItemActions& fileItemActions) { fileItemActions.setParentWidget(m_mainWindow); // insert 'Open With...' action or sub menu fileItemActions.addOpenWithActionsTo(this, QStringLiteral("DesktopEntryName != '%1'").arg(qApp->desktopFileName())); +} + +void DolphinContextMenu::addServiceActions(KFileItemActions& fileItemActions) +{ + fileItemActions.setParentWidget(m_mainWindow); // insert 'Actions' sub menu fileItemActions.addServiceActionsTo(this);