]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincontextmenu.cpp
[KStandardItemListWidget] Avoid needless image resizing
[dolphin.git] / src / dolphincontextmenu.cpp
index 4801aa3afc517aeaaa1ab87d9dd317dd657913a4..7d7d7a40843f4b77d741e50bb10d601fe2f58e05 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,21 +228,11 @@ 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"))) {
+            addOpenWithActions(fileItemActions);
+
             openParentAction = new QAction(QIcon::fromTheme(QStringLiteral("document-open-folder")),
                                            i18nc("@action:inmenu",
                                                  "Open Path"),
@@ -247,10 +253,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 +282,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,9 +338,16 @@ 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")));
+    addAction(m_mainWindow->actionCollection()->action(QStringLiteral("file_new")));
     addAction(m_mainWindow->actionCollection()->action(QStringLiteral("new_tab")));
 
     // Insert 'Add to Places' entry if exactly one item is selected
@@ -342,12 +363,14 @@ void DolphinContextMenu::openViewportContextMenu()
     addAction(pasteAction);
     addSeparator();
 
-    // Insert service actions
-    const KFileItemListProperties baseUrlProperties(KFileItemList() << baseFileItem());
-    KFileItemActions fileItemActions;
-    fileItemActions.setItemListProperties(baseUrlProperties);
-    addServiceActions(fileItemActions);
+    // Insert 'Sort By' and 'View Mode'
+    addAction(m_mainWindow->actionCollection()->action(QStringLiteral("sort")));
+    addAction(m_mainWindow->actionCollection()->action(QStringLiteral("view_mode")));
 
+    addSeparator();
+
+    // Insert service actions
+    fileItemActions.addServiceActionsTo(this);
     fileItemActions.addPluginActionsTo(this);
 
     addVersionControlPluginActions();
@@ -469,15 +492,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 != 'dolphin'"));
-
-    // insert 'Actions' sub menu
-    fileItemActions.addServiceActionsTo(this);
+    fileItemActions.addOpenWithActionsTo(this, QStringLiteral("DesktopEntryName != '%1'").arg(qApp->desktopFileName()));
 }
 
 void DolphinContextMenu::addVersionControlPluginActions()