From c00d380ebe58d6c4c1765e33264d787f8ccef126 Mon Sep 17 00:00:00 2001 From: David Redondo Date: Fri, 11 Jun 2021 09:40:21 +0200 Subject: [PATCH] krunerglobalshortcuts: Fix migration from old component When calling cleanUpComponent KGlobalAccel checks if there are no shortcuts active, otherwise it will refuse to clean the component. For a desktop file component (aka KServiceActionComponent) all shortcuts are deactivated inside cleanUpComponent. For a regular Component we have to do this manually. --- krunner/update/krunnerglobalshortcuts.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/krunner/update/krunnerglobalshortcuts.cpp b/krunner/update/krunnerglobalshortcuts.cpp index af9ffbe1f..618502e34 100644 --- a/krunner/update/krunnerglobalshortcuts.cpp +++ b/krunner/update/krunnerglobalshortcuts.cpp @@ -58,16 +58,24 @@ int main(int argc, char **argv) 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)) { + + // It can happen that the old component is not active so we do it unconditionally + KActionCollection oldActions(nullptr, oldCompomentName); + QAction oldRunCommandAction, oldRunClipboardAction; + oldActions.addAction(QStringLiteral("run command"), &oldRunCommandAction); + oldActions.addAction(QStringLiteral("run command on clipboard contents"), &oldRunClipboardAction); + oldRunCommand = KGlobalAccel::self()->globalShortcut(oldCompomentName, oldRunCommandAction.objectName()); + oldRunClipboard = KGlobalAccel::self()->globalShortcut(oldCompomentName, oldRunClipboardAction.objectName()); + KGlobalAccel::self()->setShortcut(&oldRunCommandAction, {}); + KGlobalAccel::self()->setShortcut(&oldRunClipboardAction, {}); + KGlobalAccel::self()->removeAllShortcuts(&oldRunCommandAction); + KGlobalAccel::self()->removeAllShortcuts(&oldRunClipboardAction); + KGlobalAccel::self()->cleanComponent(oldCompomentName); + + 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; } shortCutActions.takeAction(runCommandAction); -- 2.25.1