diff --git a/app/compressfileitemaction.cpp b/app/compressfileitemaction.cpp --- a/app/compressfileitemaction.cpp +++ b/app/compressfileitemaction.cpp @@ -28,6 +28,8 @@ #include #include +#include + #include "pluginmanager.h" K_PLUGIN_FACTORY_WITH_JSON(CompressFileItemActionFactory, "compressfileitemaction.json", registerPlugin();) @@ -46,31 +48,41 @@ return {}; } + // KFileItemListProperties::isLocal() doesn't check target URL (e.g. files on the desktop) + const auto urlList = fileItemInfos.urlList(); + const bool hasLocalUrl = std::any_of(urlList.begin(), urlList.end(), [](const QUrl &url) { + return url.isLocalFile(); + }); + + if (!hasLocalUrl) { + return {}; + } + QList actions; const QIcon icon = QIcon::fromTheme(QStringLiteral("ark")); QMenu *compressMenu = new QMenu(parentWidget); compressMenu->addAction(createAction(icon, i18nc("@action:inmenu Part of Compress submenu in Dolphin context menu", "Here (as TAR.GZ)"), parentWidget, - fileItemInfos.urlList(), + urlList, QStringLiteral("ark --changetofirstpath --add --autofilename tar.gz %F"))); const QMimeType zipMime = QMimeDatabase().mimeTypeForName(QStringLiteral("application/zip")); // Don't offer zip compression if no zip plugin is available. if (!m_pluginManager->preferredWritePluginsFor(zipMime).isEmpty()) { compressMenu->addAction(createAction(icon, i18nc("@action:inmenu Part of Compress submenu in Dolphin context menu", "Here (as ZIP)"), parentWidget, - fileItemInfos.urlList(), + urlList, QStringLiteral("ark --changetofirstpath --add --autofilename zip %F"))); } compressMenu->addAction(createAction(icon, i18nc("@action:inmenu Part of Compress submenu in Dolphin context menu", "Compress to..."), parentWidget, - fileItemInfos.urlList(), + urlList, QStringLiteral("ark --add --changetofirstpath --dialog %F"))); QAction *compressMenuAction = new QAction(i18nc("@action:inmenu Compress submenu in Dolphin context menu", "Compress"), parentWidget);