forked from pool/plasma6-workspace
212 lines
8.6 KiB
Diff
212 lines
8.6 KiB
Diff
|
From 1a5f040113e1d27f9298bfdcdf55e8f2012acb5a Mon Sep 17 00:00:00 2001
|
||
|
From: Fabian Vogt <fabian@ritter-vogt.de>
|
||
|
Date: Sun, 10 Mar 2024 19:51:29 +0100
|
||
|
Subject: [PATCH] Revert "krunner: Remove kconf_update code"
|
||
|
|
||
|
This reverts commit 713f14f3fa6515e73796d86d7b442f39f288b5e9.
|
||
|
We need the migration for upgrades from < 15.4, which openQA tests
|
||
|
still.
|
||
|
|
||
|
Changes after revert: Set Version=6 and use QGuiApplication for QAction.
|
||
|
---
|
||
|
krunner/CMakeLists.txt | 1 +
|
||
|
krunner/update/CMakeLists.txt | 13 ++++
|
||
|
krunner/update/krunnerglobalshortcuts.cpp | 76 ++++++++++++++++++++++
|
||
|
krunner/update/krunnerglobalshortcuts2.upd | 3 +
|
||
|
krunner/update/krunnerhistory.cpp | 50 ++++++++++++++
|
||
|
krunner/update/krunnerhistory.upd | 3 +
|
||
|
6 files changed, 146 insertions(+)
|
||
|
create mode 100644 krunner/update/CMakeLists.txt
|
||
|
create mode 100644 krunner/update/krunnerglobalshortcuts.cpp
|
||
|
create mode 100644 krunner/update/krunnerglobalshortcuts2.upd
|
||
|
create mode 100644 krunner/update/krunnerhistory.cpp
|
||
|
create mode 100644 krunner/update/krunnerhistory.upd
|
||
|
|
||
|
diff --git a/krunner/CMakeLists.txt b/krunner/CMakeLists.txt
|
||
|
index c17bac6479..c7fead06d6 100644
|
||
|
--- a/krunner/CMakeLists.txt
|
||
|
+++ b/krunner/CMakeLists.txt
|
||
|
@@ -52,3 +52,4 @@ ecm_install_configured_files(
|
||
|
)
|
||
|
|
||
|
install(FILES completions/krunner.zsh RENAME _krunner DESTINATION ${KDE_INSTALL_ZSHAUTOCOMPLETEDIR})
|
||
|
+add_subdirectory(update)
|
||
|
diff --git a/krunner/update/CMakeLists.txt b/krunner/update/CMakeLists.txt
|
||
|
new file mode 100644
|
||
|
index 0000000000..0fbac69b3d
|
||
|
--- /dev/null
|
||
|
+++ b/krunner/update/CMakeLists.txt
|
||
|
@@ -0,0 +1,13 @@
|
||
|
+set(krunnerglobalshortcuts_SRCS
|
||
|
+ krunnerglobalshortcuts.cpp
|
||
|
+)
|
||
|
+
|
||
|
+add_executable(krunnerglobalshortcuts ${krunnerglobalshortcuts_SRCS})
|
||
|
+
|
||
|
+target_link_libraries(krunnerglobalshortcuts KF6::CoreAddons KF6::Service KF6::Runner KF6::ConfigCore KF6::GlobalAccel KF6::XmlGui)
|
||
|
+
|
||
|
+add_executable(krunnerhistory krunnerhistory.cpp)
|
||
|
+target_link_libraries(krunnerhistory KF6::Runner KF6::ConfigCore Plasma::Activities)
|
||
|
+
|
||
|
+install(TARGETS krunnerglobalshortcuts krunnerhistory DESTINATION ${KDE_INSTALL_LIBDIR}/kconf_update_bin/)
|
||
|
+install(FILES krunnerglobalshortcuts2.upd krunnerhistory.upd DESTINATION ${KDE_INSTALL_KCONFUPDATEDIR})
|
||
|
diff --git a/krunner/update/krunnerglobalshortcuts.cpp b/krunner/update/krunnerglobalshortcuts.cpp
|
||
|
new file mode 100644
|
||
|
index 0000000000..513d2ac74d
|
||
|
--- /dev/null
|
||
|
+++ b/krunner/update/krunnerglobalshortcuts.cpp
|
||
|
@@ -0,0 +1,76 @@
|
||
|
+/*
|
||
|
+ SPDX-FileCopyrightText: 2019 Kai Uwe Broulik <kde@broulik.de>
|
||
|
+ SPDX-FileCopyrightText: 2020 David Redondo <kde@david-redondo.de>
|
||
|
+
|
||
|
+ SPDX-License-Identifier: GPL-2.0-or-later
|
||
|
+*/
|
||
|
+
|
||
|
+#include <QGuiApplication>
|
||
|
+#include <QDebug>
|
||
|
+#include <QStandardPaths>
|
||
|
+
|
||
|
+#include <KActionCollection>
|
||
|
+#include <KConfig>
|
||
|
+#include <KConfigGroup>
|
||
|
+#include <KDesktopFile>
|
||
|
+#include <KGlobalAccel>
|
||
|
+#include <KSharedConfig>
|
||
|
+
|
||
|
+int main(int argc, char **argv)
|
||
|
+{
|
||
|
+ QGuiApplication app(argc, argv);
|
||
|
+
|
||
|
+ const QString oldComponentName = QStringLiteral("krunner");
|
||
|
+ const QString oldDesktopFile = QStringLiteral("krunner.desktop");
|
||
|
+ const QString newDesktopFile = QStringLiteral("org.kde.krunner.desktop");
|
||
|
+
|
||
|
+ // Since we need to fake those actions, read the translated names from the desktop file
|
||
|
+ KDesktopFile df(QStandardPaths::GenericDataLocation, QStringLiteral("kglobalaccel/") + newDesktopFile);
|
||
|
+ QString displayName = QStringLiteral("KRunner");
|
||
|
+ if (!df.readName().isEmpty()) {
|
||
|
+ displayName = df.readName();
|
||
|
+ }
|
||
|
+ const QString clipboardActionName = df.actionGroup(QStringLiteral("RunClipboard"))
|
||
|
+ .readEntry(QStringLiteral("Name"), //
|
||
|
+ QStringLiteral("Run command on clipboard contents"));
|
||
|
+
|
||
|
+ KActionCollection shortCutActions(nullptr, newDesktopFile);
|
||
|
+ shortCutActions.setComponentDisplayName(displayName);
|
||
|
+ // The actions are intentionally allocated and never cleaned up, because otherwise KGlobalAccel
|
||
|
+ // will mark them as inactive
|
||
|
+ auto runCommandAction = new QAction(displayName);
|
||
|
+ shortCutActions.addAction(QStringLiteral("_launch"), runCommandAction);
|
||
|
+ auto runClipboardAction = new QAction(clipboardActionName);
|
||
|
+ shortCutActions.addAction(QStringLiteral("RunClipboard"), runClipboardAction);
|
||
|
+
|
||
|
+ QList<QKeySequence> oldRunCommand;
|
||
|
+ QList<QKeySequence> oldRunClipboard;
|
||
|
+
|
||
|
+ // It can happen that the old component is not active so we do it unconditionally
|
||
|
+ KActionCollection oldActions(nullptr, oldComponentName);
|
||
|
+ QAction oldRunCommandAction, oldRunClipboardAction;
|
||
|
+ oldActions.addAction(QStringLiteral("run command"), &oldRunCommandAction);
|
||
|
+ oldActions.addAction(QStringLiteral("run command on clipboard contents"), &oldRunClipboardAction);
|
||
|
+ oldRunCommand = KGlobalAccel::self()->globalShortcut(oldComponentName, oldRunCommandAction.objectName());
|
||
|
+ oldRunClipboard = KGlobalAccel::self()->globalShortcut(oldComponentName, oldRunClipboardAction.objectName());
|
||
|
+ KGlobalAccel::self()->setShortcut(&oldRunCommandAction, {});
|
||
|
+ KGlobalAccel::self()->setShortcut(&oldRunClipboardAction, {});
|
||
|
+ KGlobalAccel::self()->removeAllShortcuts(&oldRunCommandAction);
|
||
|
+ KGlobalAccel::self()->removeAllShortcuts(&oldRunClipboardAction);
|
||
|
+ KGlobalAccel::self()->cleanComponent(oldComponentName);
|
||
|
+
|
||
|
+ if (KGlobalAccel::isComponentActive(oldDesktopFile)) {
|
||
|
+ oldRunCommand = KGlobalAccel::self()->globalShortcut(oldDesktopFile, runCommandAction->objectName());
|
||
|
+ oldRunClipboard = KGlobalAccel::self()->globalShortcut(oldDesktopFile, runClipboardAction->objectName());
|
||
|
+ KGlobalAccel::self()->cleanComponent(oldDesktopFile);
|
||
|
+ }
|
||
|
+
|
||
|
+ if (!oldRunCommand.isEmpty()) {
|
||
|
+ KGlobalAccel::self()->setShortcut(runCommandAction, oldRunCommand, KGlobalAccel::NoAutoloading);
|
||
|
+ }
|
||
|
+ if (!oldRunClipboard.isEmpty()) {
|
||
|
+ KGlobalAccel::self()->setShortcut(runClipboardAction, oldRunClipboard, KGlobalAccel::NoAutoloading);
|
||
|
+ }
|
||
|
+
|
||
|
+ return 0;
|
||
|
+}
|
||
|
diff --git a/krunner/update/krunnerglobalshortcuts2.upd b/krunner/update/krunnerglobalshortcuts2.upd
|
||
|
new file mode 100644
|
||
|
index 0000000000..84c7197382
|
||
|
--- /dev/null
|
||
|
+++ b/krunner/update/krunnerglobalshortcuts2.upd
|
||
|
@@ -0,0 +1,3 @@
|
||
|
+Version=6
|
||
|
+Id=5.22KRunnerGlobalShortcuts
|
||
|
+Script=krunnerglobalshortcuts
|
||
|
diff --git a/krunner/update/krunnerhistory.cpp b/krunner/update/krunnerhistory.cpp
|
||
|
new file mode 100644
|
||
|
index 0000000000..9e3c29ef4a
|
||
|
--- /dev/null
|
||
|
+++ b/krunner/update/krunnerhistory.cpp
|
||
|
@@ -0,0 +1,50 @@
|
||
|
+/*
|
||
|
+ SPDX-FileCopyrightText: 2020 Alexander Lohnau <alexander.lohnau@gmx.de>
|
||
|
+
|
||
|
+ SPDX-License-Identifier: GPL-2.0-or-later
|
||
|
+*/
|
||
|
+
|
||
|
+#include <QCoreApplication>
|
||
|
+#include <QTimer>
|
||
|
+
|
||
|
+#include <PlasmaActivities/Consumer>
|
||
|
+#include <KConfigGroup>
|
||
|
+#include <KSharedConfig>
|
||
|
+
|
||
|
+using namespace Qt::StringLiterals;
|
||
|
+
|
||
|
+int main(int argc, char **argv)
|
||
|
+{
|
||
|
+ QCoreApplication app(argc, argv);
|
||
|
+
|
||
|
+ // Migrate data to state data file
|
||
|
+ KSharedConfigPtr krunnerrc = KSharedConfig::openConfig("krunnerrc");
|
||
|
+ KConfigGroup stateData = krunnerrc->group(u"PlasmaRunnerManager"_s);
|
||
|
+ KSharedConfigPtr newStateLocation = KSharedConfig::openConfig("krunnerstaterc", KConfig::NoGlobals, QStandardPaths::GenericDataLocation);
|
||
|
+ stateData.reparent(newStateLocation.data());
|
||
|
+ stateData.sync();
|
||
|
+
|
||
|
+ // Migrate history to activity aware config
|
||
|
+ auto consumer = new KActivities::Consumer();
|
||
|
+ // Wait a bit for consumer to be initialized
|
||
|
+ QObject::connect(consumer, &KActivities::Consumer::serviceStatusChanged, consumer, [consumer, newStateLocation, krunnerrc]() {
|
||
|
+ const QString history = krunnerrc->group(u"General"_s).readEntry("history");
|
||
|
+ QStringList activities = consumer->activities();
|
||
|
+ if (activities.isEmpty()) {
|
||
|
+ activities.append(QStringLiteral("00000000-0000-0000-0000-000000000000"));
|
||
|
+ }
|
||
|
+ KConfigGroup newHistory = newStateLocation->group(u"PlasmaRunnerManager"_s).group(u"History"_s);
|
||
|
+ for (const QString &activity : std::as_const(activities)) {
|
||
|
+ newHistory.writeEntry(activity, history);
|
||
|
+ }
|
||
|
+ newHistory.sync();
|
||
|
+ // Delete old values
|
||
|
+ krunnerrc->group(u"General"_s).deleteEntry("history");
|
||
|
+ krunnerrc->deleteGroup(u"PlasmaRunnerManager"_s);
|
||
|
+ krunnerrc->group(QStringLiteral("PlasmaRunnerManager")).writeEntry("migrated", true);
|
||
|
+ krunnerrc->sync();
|
||
|
+ qApp->exit();
|
||
|
+ });
|
||
|
+
|
||
|
+ return QCoreApplication::exec();
|
||
|
+}
|
||
|
diff --git a/krunner/update/krunnerhistory.upd b/krunner/update/krunnerhistory.upd
|
||
|
new file mode 100644
|
||
|
index 0000000000..bb3c0502b0
|
||
|
--- /dev/null
|
||
|
+++ b/krunner/update/krunnerhistory.upd
|
||
|
@@ -0,0 +1,3 @@
|
||
|
+Version=6
|
||
|
+Id=5.21KRunnerHistory
|
||
|
+Script=krunnerhistory
|
||
|
--
|
||
|
2.44.0
|
||
|
|