+
+ 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(m_popup);
+ m_popup->addActions(plugin->actions(props, m_mainWindow));
+ }
+ // New API (kdelibs >= 4.6.1)
+ KAbstractFileItemActionPlugin* abstractPlugin = service->createInstance<KAbstractFileItemActionPlugin>();
+ if (abstractPlugin) {
+ abstractPlugin->setParent(m_popup);
+ m_popup->addActions(abstractPlugin->actions(props, m_mainWindow));
+ }
+ }
+}
+
+void DolphinContextMenu::addVersionControlPluginActions()
+{
+ const DolphinView* view = m_mainWindow->activeViewContainer()->view();
+ const QList<QAction*> versionControlActions = view->versionControlActions(m_selectedItems);
+ if (!versionControlActions.isEmpty()) {
+ foreach (QAction* action, versionControlActions) {
+ m_popup->addAction(action);
+ }
+ m_popup->addSeparator();
+ }
+}
+
+void DolphinContextMenu::addCustomActions()
+{
+ foreach (QAction* action, m_customActions) {
+ m_popup->addAction(action);
+ }
+}
+
+void DolphinContextMenu::updateRemoveAction()
+{
+ const KActionCollection* collection = m_mainWindow->actionCollection();
+
+ // Using m_removeAction->setText(action->text()) does not apply the &-shortcut.
+ // This is only done until the original action has been shown at least once. To
+ // bypass this issue, the text and &-shortcut is applied manually.
+ const QAction* action = 0;
+ if (moveToTrash()) {
+ action = collection->action("move_to_trash");
+ m_removeAction->setText(i18nc("@action:inmenu", "&Move to Trash"));
+ } else {
+ action = collection->action("delete");
+ m_removeAction->setText(i18nc("@action:inmenu", "&Delete"));
+ }
+ m_removeAction->setIcon(action->icon());
+ m_removeAction->setShortcuts(action->shortcuts());
+}
+
+bool DolphinContextMenu::moveToTrash() const
+{
+ return !m_shiftPressed;