Commit 6e7c616f authored by David Redondo's avatar David Redondo 🏎
Browse files

Adjust krunner shortcuts update binary

Because we have changed the name of the desktop file, this also
changes the name of the kglobalaccel component. I have adjusted the program so
it checks which of the two old components is active and then sets the shortcuts
on the new one. I have opted for this because we cannot guarantee the order of
update scripts.
parent 10d647c4
/***************************************************************************
* Copyright (C) 2019 by Kai Uwe Broulik <kde@broulik.de> *
* Copyright (C) 2020 David Redondo <kde@david-redondo.de> *
* *
* 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<QObject *>(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<QObject *>(nullptr));
shortCutActions.setComponentName(QStringLiteral("krunner.desktop"));
shortCutActions.setComponentDisplayName(displayName);
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)) {
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;
......
Version=5
Id=5.17KRunnerGlobalShortcuts
Id=5.22KRunnerGlobalShortcuts
Script=krunnerglobalshortcuts
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment