Group :: Desktop gráfico/KDE
RPM: plasma5-workspace
Main Changelog Spec Patches Sources Download Gear Bugs e FR Repocop
Patch: alt-add-using-the-altappstarter.patch
Download
Download
diff --git a/applets/kicker/plugin/actionlist.cpp b/applets/kicker/plugin/actionlist.cpp
index f6ccccca4..b7697f627 100644
--- a/applets/kicker/plugin/actionlist.cpp
+++ b/applets/kicker/plugin/actionlist.cpp
@@ -403,6 +403,39 @@ bool handleAppstreamActions(const QStrin
return false;
}
+// It is used for AltAppStarter to run applications as another user:
+QVariantList altappstartActions(const KService::Ptr &service)
+{
+ QVariantList ret;
+
+ const KService::Ptr altAppStartHandler = KApplicationTrader::preferredService(QStringLiteral("x-scheme-handler/altappstart"));
+
+ if (!altAppStartHandler) {
+ if (!KProtocolInfo::isHelperProtocol(QStringLiteral("altappstart"))
+ || KProtocolInfo::exec(QStringLiteral("altappstart")).isEmpty()) {
+ return ret;
+ }
+ }
+
+ QVariantMap altappstartAction = Kicker::createActionItem(
+ i18nc("@action opens the AltLinux Application Starter", "Run application as another user..."),
+ altAppStartHandler->icon(),
+ QStringLiteral("runApplicationViaAltAppStarter"), QVariant(QLatin1String("altappstart://") + service->desktopEntryName()));
+ ret << altappstartAction;
+
+ return ret;
+}
+
+// It is used for AltAppStarter to run applications as another user:
+bool handleAltAppStartActions(const QString &actionId, const QVariant &argument)
+{
+ if (actionId == QLatin1String("runApplicationViaAltAppStarter")) {
+ return QDesktopServices::openUrl(QUrl(argument.toString()));
+ }
+
+ return false;
+}
+
QString resolvedServiceEntryPath(const KService::Ptr &service)
{
QString path = service->entryPath();
diff --git a/applets/kicker/plugin/actionlist.h b/applets/kicker/plugin/actionlist.h
index db706d920..8ea3b64c8 100644
--- a/applets/kicker/plugin/actionlist.h
+++ b/applets/kicker/plugin/actionlist.h
@@ -68,6 +68,10 @@ bool handleEditApplicationAction(const QString &actionId, const KService::Ptr &s
QVariantList appstreamActions(const KService::Ptr &service);
bool handleAppstreamActions(const QString &actionId, const QVariant &argument);
+// It is used for AltAppStarter to run applications as another user:
+QVariantList altappstartActions(const KService::Ptr &service);
+bool handleAltAppStartActions(const QString &actionId, const QVariant &argument);
+
QString resolvedServiceEntryPath(const KService::Ptr &service);
}
diff --git a/applets/kicker/plugin/appentry.cpp b/applets/kicker/plugin/appentry.cpp
--- a/applets/kicker/plugin/appentry.cpp
+++ b/applets/kicker/plugin/appentry.cpp
@@ -186,6 +186,7 @@ QVariantList AppEntry::actions() const
actionList << Kicker::createSeparatorActionItem();
actionList << Kicker::editApplicationAction(m_service);
actionList << Kicker::appstreamActions(m_service);
+ actionList << Kicker::altappstartActions(m_service); // AltAppStarter
}
if (appletInterface) {
@@ -238,6 +239,8 @@ bool AppEntry::run(const QString &action
return true;
} else if (Kicker::handleAppstreamActions(actionId, argument)) {
return true;
+ } else if (Kicker::handleAltAppStartActions(actionId, argument)) { // AltAppStarter
+ return true;
} else if (actionId == QLatin1String("_kicker_jumpListAction")) {
auto job = new KIO::CommandLauncherJob(argument.toString());
job->setDesktopName(m_service->entryPath());
diff --git a/applets/kicker/plugin/runnermatchesmodel.cpp b/applets/kicker/plugin/runnermatchesmodel.cpp
index b52bd868f..1d2540e1e 100644
--- a/applets/kicker/plugin/runnermatchesmodel.cpp
+++ b/applets/kicker/plugin/runnermatchesmodel.cpp
@@ -148,6 +148,7 @@ QVariant RunnerMatchesModel::data(const QModelIndex &index, int role) const
if (service->isApplication()) {
actionList << Kicker::editApplicationAction(service);
actionList << Kicker::appstreamActions(service);
+ actionList << Kicker::altappstartActions(service); // AltAppStarter
}
}
@@ -184,6 +185,8 @@ bool RunnerMatchesModel::trigger(int row, const QString &actionId, const QVarian
return true;
} else if (Kicker::handleAppstreamActions(actionId, argument)) {
return true;
+ } else if (Kicker::handleAltAppStartActions(actionId, argument)) { // AltAppStarter
+ return true;
} else if (actionId == QLatin1String("_kicker_jumpListAction")) {
return KRun::run(argument.toString(), {}, nullptr, service ? service->name() : QString(), service ? service->icon() : QString());
} else if (actionId == QLatin1String("_kicker_recentDocument")