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.
wilder-5.24
David Redondo 5 years ago
parent 58baacb18e
commit e275ae2c8e
  1. 22
      krunner/update/krunnerglobalshortcuts.cpp

@ -58,16 +58,24 @@ int main(int argc, char **argv)
QList<QKeySequence> oldRunCommand;
QList<QKeySequence> 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);

Loading…
Cancel
Save