+KFileItem DolphinContextMenu::baseFileItem()
+{
+ if (!m_baseFileItem) {
+ m_baseFileItem = new KFileItem(KFileItem::Unknown, KFileItem::Unknown, m_baseUrl);
+ }
+ return *m_baseFileItem;
+}
+
+void DolphinContextMenu::addServiceActions(KFileItemActions& fileItemActions)
+{
+ fileItemActions.setParentWidget(m_mainWindow);
+
+ // insert 'Open With...' action or sub menu
+ fileItemActions.addOpenWithActionsTo(m_popup, "DesktopEntryName != 'dolphin'");
+
+ // insert 'Actions' sub menu
+ fileItemActions.addServiceActionsTo(m_popup);
+}
+
+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(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);