]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Move "Open" actions to the top of the context menu for files
authorNathaniel Graham <nate@kde.org>
Mon, 2 Apr 2018 14:05:47 +0000 (08:05 -0600)
committerNathaniel Graham <nate@kde.org>
Sun, 22 Apr 2018 15:40:50 +0000 (09:40 -0600)
Summary:
This patch moves the "Open", "Open With", and "Open in" items to the top of the context menu to reap the following benefits:
- Move the "Open" and "Open With" items closer to the top since they're commonly used items, and right now they're buried in the middle of the menu
- Group related functionality
- Consistency with other common platforms (macOS Finder and Windows Explorer both have these items at the top of the context menu)

For folders, the "Open With" entries are moved higher, but not all the way to the top, since the "open in New tab/folder" entries are more useful.

Test Plan:
Tested all menu items in the context menu for files, folders, and links; all still work.

Context menu for single file:
{F5806809}

Context menu for multiple files:
{F5806810}

Context menu for single folder:
{F5806811}

Context menu for multiple folders:
{F5806812}

Context menu for symlink to folder:
{F5806815}

Reviewers: #dolphin, #vdg, elvisangelaccio, abetts

Reviewed By: #dolphin, #vdg, elvisangelaccio, abetts

Subscribers: markg, abetts, elvisangelaccio

Differential Revision: https://phabricator.kde.org/D11884

src/dolphincontextmenu.cpp
src/dolphincontextmenu.h

index bedc835c2af7e04c3d9c139956d6f401de26fa7a..befe98677afaca4738f1377573d7f1603900b955 100644 (file)
@@ -192,13 +192,29 @@ void DolphinContextMenu::openItemContextMenu()
     QAction* addToPlacesAction = nullptr;
     const KFileItemListProperties& selectedItemsProps = selectedItemsProperties();
 
+    KFileItemActions fileItemActions;
+    fileItemActions.setParentWidget(m_mainWindow);
+    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 +228,6 @@ void DolphinContextMenu::openItemContextMenu()
             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,10 +251,20 @@ void DolphinContextMenu::openItemContextMenu()
 
             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 {
@@ -266,18 +280,16 @@ void DolphinContextMenu::openItemContextMenu()
         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.addServiceActionsTo(this);
     fileItemActions.addPluginActionsTo(this);
 
     addVersionControlPluginActions();
@@ -324,6 +336,13 @@ void DolphinContextMenu::openViewportContextMenu()
     addMenu(newFileMenu->menu());
     addSeparator();
 
+    // Insert 'Open With' entries
+    const KFileItemListProperties baseUrlProperties(KFileItemList() << baseFileItem());
+    KFileItemActions fileItemActions;
+    fileItemActions.setParentWidget(m_mainWindow);
+    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,11 +362,7 @@ void DolphinContextMenu::openViewportContextMenu()
     addSeparator();
 
     // Insert service actions
-    const KFileItemListProperties baseUrlProperties(KFileItemList() << baseFileItem());
-    KFileItemActions fileItemActions;
-    fileItemActions.setItemListProperties(baseUrlProperties);
-    addServiceActions(fileItemActions);
-
+    fileItemActions.addServiceActionsTo(this);
     fileItemActions.addPluginActionsTo(this);
 
     addVersionControlPluginActions();
@@ -469,15 +484,10 @@ KFileItem DolphinContextMenu::baseFileItem()
     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()));
-
-    // insert 'Actions' sub menu
-    fileItemActions.addServiceActionsTo(this);
 }
 
 void DolphinContextMenu::addVersionControlPluginActions()
index 9ebdb1a566574bc90c779a1e9588bedb9a367d67..bf0cf2c97c8935cc51711001855b3c9ea69a9eff 100644 (file)
@@ -116,10 +116,9 @@ private:
     KFileItem baseFileItem();
 
     /**
-     * Adds actions that have been installed as service-menu.
-     * (see http://techbase.kde.org/index.php?title=Development/Tutorials/Creating_Konqueror_Service_Menus)
+     * Adds "Open With" actions
      */
-    void addServiceActions(KFileItemActions& fileItemActions);
+    void addOpenWithActions(KFileItemActions& fileItemActions);
 
     /**
      * Adds actions that are provided by a KVersionControlPlugin.