diff --git a/activities/fileitemplugin/FileItemLinkingPlugin.cpp b/activities/fileitemplugin/FileItemLinkingPlugin.cpp --- a/activities/fileitemplugin/FileItemLinkingPlugin.cpp +++ b/activities/fileitemplugin/FileItemLinkingPlugin.cpp @@ -41,6 +41,8 @@ #include #include +#include + #include "common/dbus/common.h" K_PLUGIN_FACTORY_WITH_JSON(ActivityLinkingFileItemActionFactory, @@ -141,6 +143,10 @@ void FileItemLinkingPlugin::Private::setActions(const ActionList &actions) { + if (!rootMenu) { + return; + } + for (auto action: rootMenu->actions()) { rootMenu->removeAction(action); action->deleteLater(); @@ -189,6 +195,17 @@ QList FileItemLinkingPlugin::actions(const KFileItemListProperties &fileItemInfos, QWidget *parentWidget) { + // We can only link local files, don't show the menu if there are none + // KFileItemListProperties::isLocal() is for *all* being local, we just want *any* local + const auto urlList = fileItemInfos.urlList(); + const bool hasLocalUrl = std::any_of(urlList.begin(), urlList.end(), [](const QUrl &url) { + return url.isLocalFile(); + }); + + if (!hasLocalUrl) { + return {}; + } + d->items = fileItemInfos; return { d->basicAction(parentWidget) }; diff --git a/activities/fileitemplugin/FileItemLinkingPlugin_p.h b/activities/fileitemplugin/FileItemLinkingPlugin_p.h --- a/activities/fileitemplugin/FileItemLinkingPlugin_p.h +++ b/activities/fileitemplugin/FileItemLinkingPlugin_p.h @@ -45,7 +45,7 @@ Private(); QAction *root; - QMenu *rootMenu; + QMenu *rootMenu = nullptr; KFileItemListProperties items; QAction *basicAction(QWidget *parentWidget);