Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37735021
en ru br
Репозитории ALT

Группа :: Графические оболочки/KDE
Пакет: plasma5-workspace

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: alt-add-using-the-altappstarter.patch
Скачать


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")
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin