- fileItemActions.addOpenWithActionsTo(this, "DesktopEntryName != 'dolphin'");
-
- // insert 'Actions' sub menu
- fileItemActions.addServiceActionsTo(this);
-}
-
-void DolphinContextMenu::addFileItemPluginActions()
-{
- KFileItemListProperties props;
- if (m_selectedItems.isEmpty()) {
- props.setItems(KFileItemList() << baseFileItem());
- } else {
- props = selectedItemsProperties();
- }
-
- QString commonMimeType = props.mimeType();
- if (commonMimeType.isEmpty()) {
- commonMimeType = QLatin1String("application/octet-stream");
- }
-
- const KService::List pluginServices = KMimeTypeTrader::self()->query(commonMimeType, "KFileItemAction/Plugin", "exist Library");
- if (pluginServices.isEmpty()) {
- return;
- }
-
- const KConfig config("kservicemenurc", KConfig::NoGlobals);
- const KConfigGroup showGroup = config.group("Show");
-
- foreach (const KSharedPtr<KService>& service, pluginServices) {
- if (!showGroup.readEntry(service->desktopEntryName(), true)) {
- // The plugin has been disabled
- continue;
- }
-
- // Old API (kdelibs-4.6.0 only)
- KFileItemActionPlugin* plugin = service->createInstance<KFileItemActionPlugin>();
- if (plugin) {
- plugin->setParent(this);
- addActions(plugin->actions(props, m_mainWindow));
- }
- // New API (kdelibs >= 4.6.1)
- KAbstractFileItemActionPlugin* abstractPlugin = service->createInstance<KAbstractFileItemActionPlugin>();
- if (abstractPlugin) {
- abstractPlugin->setParent(this);
- addActions(abstractPlugin->actions(props, m_mainWindow));
+ m_fileItemActions->insertOpenWithActionsTo(nullptr, this, QStringList{qApp->desktopFileName()});
+
+ // For a single file, hint in "Open with" menu that middle-clicking would open it in the secondary app.
+ // (Unless middle-clicking would open it as a folder in a new tab (e.g. archives).)
+ const QUrl &url = DolphinView::openItemAsFolderUrl(m_fileInfo, GeneralSettings::browseThroughArchives());
+ if (m_selectedItems.count() == 1 && url.isEmpty()) {
+ if (QAction *openWithSubMenu = findChild<QAction *>(QStringLiteral("openWith_submenu"))) {
+ Q_ASSERT(openWithSubMenu->menu());
+ Q_ASSERT(!openWithSubMenu->menu()->isEmpty());
+
+ auto *secondaryApp = openWithSubMenu->menu()->actions().first();
+ // Add it like a keyboard shortcut, Qt uses \t as a separator.
+ if (!secondaryApp->text().contains(QLatin1Char('\t'))) {
+ secondaryApp->setText(secondaryApp->text() + QLatin1Char('\t')
+ + i18nc("@action:inmenu Shortcut, middle click to trigger menu item, keep short", "Middle Click"));
+ }