diff --git a/krunner/update/krunnerglobalshortcuts.cpp b/krunner/update/krunnerglobalshortcuts.cpp index 3f5ee5624..199ea5077 100644 --- a/krunner/update/krunnerglobalshortcuts.cpp +++ b/krunner/update/krunnerglobalshortcuts.cpp @@ -1,5 +1,6 @@ /*************************************************************************** * Copyright (C) 2019 by Kai Uwe Broulik * + * Copyright (C) 2020 David Redondo * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -32,53 +33,49 @@ int main(int argc, char **argv) { QCoreApplication app(argc, argv); - const auto oldRunCommand = KGlobalAccel::self()->globalShortcut(QStringLiteral("krunner"), QStringLiteral("run command")); - const auto oldRunClipboard = KGlobalAccel::self()->globalShortcut(QStringLiteral("krunner"), QStringLiteral("run command on clipboard contents")); + const QString oldCompomentName = QStringLiteral("krunner"); + const QString oldDesktopFile = QStringLiteral("krunner.desktop"); + const QString newDesktopFile = QStringLiteral("org.kde.krunner.desktop"); - // Fake krunner and remove the old shortcuts - { - KActionCollection oldCollection(static_cast(nullptr)); - oldCollection.setComponentName(QStringLiteral("krunner")); - - QAction *oldAction = new QAction(); - oldCollection.addAction(QStringLiteral("run command"), oldAction); - KGlobalAccel::self()->setDefaultShortcut(oldAction, {}); - KGlobalAccel::self()->removeAllShortcuts(oldAction); - - QAction *oldClipboard = new QAction(); - oldCollection.addAction(QStringLiteral("run command on clipboard contents"), oldClipboard); - KGlobalAccel::self()->setDefaultShortcut(oldClipboard, {}); - KGlobalAccel::self()->removeAllShortcuts(oldClipboard); + // 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")); - // Fake krunner.desktop launcher and transfer the shortcuts over - { - // Since we need to fake those actions, read the translated names from the desktop file - KDesktopFile df(QStandardPaths::GenericDataLocation, QStringLiteral("kglobalaccel/krunner.desktop")); - - QString displayName = QStringLiteral("KRunner"); - if (!df.readName().isEmpty()) { - displayName = df.readName(); - } + KActionCollection shortCutActions(nullptr, oldDesktopFile); + shortCutActions.setComponentDisplayName(displayName); + QAction runCommandAction(displayName); + shortCutActions.addAction(QStringLiteral("_launch"), &runCommandAction); + QAction runClipboardAction(clipboardActionName); + shortCutActions.addAction(QStringLiteral("RunClipboard"), &runClipboardAction); - const QString clipboardActionName = - df.actionGroup(QStringLiteral("RunClipboard")).readEntry(QStringLiteral("Name"), QStringLiteral("Run command on clipboard contents")); - - KActionCollection shortCutActions(static_cast(nullptr)); - shortCutActions.setComponentName(QStringLiteral("krunner.desktop")); - shortCutActions.setComponentDisplayName(displayName); + QList oldRunCommand; + QList oldRunClipboard; + if (KGlobalAccel::isComponentActive(oldCompomentName)) { + oldRunCommand = KGlobalAccel::self()->globalShortcut(oldCompomentName, QStringLiteral("run command")); + oldRunClipboard = KGlobalAccel::self()->globalShortcut(oldCompomentName, QStringLiteral("run command on clipboard contents")); + KGlobalAccel::self()->cleanComponent(oldCompomentName); + } else if(KGlobalAccel::isComponentActive(oldDesktopFile)) { + oldRunCommand = KGlobalAccel::self()->globalShortcut(oldDesktopFile, runCommandAction.objectName()); + oldRunClipboard = KGlobalAccel::self()->globalShortcut(oldDesktopFile, runClipboardAction.objectName()); + KGlobalAccel::self()->cleanComponent(oldDesktopFile); + } else { + return 0; + } - if (!oldRunCommand.isEmpty()) { - QAction *runCommandAction = new QAction(displayName); - shortCutActions.addAction(QStringLiteral("_launch"), runCommandAction); - KGlobalAccel::self()->setShortcut(runCommandAction, oldRunCommand, KGlobalAccel::NoAutoloading); - } + shortCutActions.takeAction(&runCommandAction); + shortCutActions.takeAction(&runClipboardAction); + shortCutActions.setComponentName(newDesktopFile); + shortCutActions.addActions({&runCommandAction, &runClipboardAction}); - if (!oldRunClipboard.isEmpty()) { - QAction *runClipboardAction = new QAction(clipboardActionName); - shortCutActions.addAction(QStringLiteral("RunClipboard"), runClipboardAction); - KGlobalAccel::self()->setShortcut(runClipboardAction, oldRunClipboard, KGlobalAccel::NoAutoloading); - } + 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/krunnerglobalshortcuts.upd b/krunner/update/krunnerglobalshortcuts.upd index 35030aaae..5e48f4ead 100644 --- a/krunner/update/krunnerglobalshortcuts.upd +++ b/krunner/update/krunnerglobalshortcuts.upd @@ -1,3 +1,3 @@ Version=5 -Id=5.17KRunnerGlobalShortcuts +Id=5.22KRunnerGlobalShortcuts Script=krunnerglobalshortcuts