1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
/*
This file is part of the KDE libraries
SPDX-FileCopyrightText: 2022 Aleix Pol Gonzalez <aleixpol@kde.org>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include <KGlobalAccel>
#include <QAction>
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QTest>
class GlobalAction : public QAction, public QQmlParserStatus
{
Q_OBJECT
Q_INTERFACES(QQmlParserStatus)
Q_PROPERTY(bool active READ isActive NOTIFY activeChanged)
public:
GlobalAction()
{
connect(this, &QAction::changed, this, &GlobalAction::refresh);
connect(KGlobalAccel::self(), &KGlobalAccel::globalShortcutActiveChanged, this, [this](QAction *action, bool active) {
if (action != this) {
return;
}
qDebug() << "active changed" << action << active;
m_active = active;
Q_EMIT activeChanged(active);
});
}
void classBegin() override
{
}
void componentComplete() override
{
m_done = true;
refresh();
}
void refresh()
{
if (!m_done) {
return;
}
bool added = KGlobalAccel::self()->setShortcut(this, {shortcut()}, KGlobalAccel::NoAutoloading);
if (!added) {
qWarning() << "could not set the global shortcut" << shortcut();
} else {
qDebug() << "shortcut set correctly" << shortcut();
}
}
bool isActive() const
{
return m_active;
}
Q_SIGNALS:
void activeChanged(bool active);
private:
bool m_done = false;
bool m_active = false;
};
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterType<GlobalAction>("org.kde.globalaccel", 1, 0, "GlobalAction");
engine.load(QFINDTESTDATA("kglobalacceltest.qml"));
return app.exec();
}
#include "kglobalacceltest.moc"
|