diff --git a/autotests/integration/modifier_only_shortcut_test.cpp b/autotests/integration/modifier_only_shortcut_test.cpp index f38318551c471bc6e89e002b40757580e57f5196..f9a166a0f3ce3056598b7467f6528d0903ebdc6c 100644 --- a/autotests/integration/modifier_only_shortcut_test.cpp +++ b/autotests/integration/modifier_only_shortcut_test.cpp @@ -49,6 +49,8 @@ private Q_SLOTS: void testTrigger_data(); void testTrigger(); void testCapsLock(); + void testGlobalShortcutsDisabled_data(); + void testGlobalShortcutsDisabled(); }; class Target : public QObject @@ -288,5 +290,75 @@ void ModifierOnlyShortcutTest::testCapsLock() QCOMPARE(triggeredSpy.count(), 1); } +void ModifierOnlyShortcutTest::testGlobalShortcutsDisabled_data() +{ + QTest::addColumn("metaConfig"); + QTest::addColumn("altConfig"); + QTest::addColumn("controlConfig"); + QTest::addColumn("shiftConfig"); + QTest::addColumn("modifier"); + + const QStringList trigger = QStringList{s_serviceName, s_path, s_serviceName, QStringLiteral("shortcut")}; + const QStringList e = QStringList(); + + QTest::newRow("leftMeta") << trigger << e << e << e << KEY_LEFTMETA; + QTest::newRow("rightMeta") << trigger << e << e << e << KEY_RIGHTMETA; + QTest::newRow("leftAlt") << e << trigger << e << e << KEY_LEFTALT; + QTest::newRow("rightAlt") << e << trigger << e << e << KEY_RIGHTALT; + QTest::newRow("leftControl") << e << e << trigger << e << KEY_LEFTCTRL; + QTest::newRow("rightControl") << e << e << trigger << e << KEY_RIGHTCTRL; + QTest::newRow("leftShift") << e << e << e << trigger << KEY_LEFTSHIFT; + QTest::newRow("rightShift") << e << e << e << trigger <config()->group("ModifierOnlyShortcuts"); + QFETCH(QStringList, metaConfig); + QFETCH(QStringList, altConfig); + QFETCH(QStringList, shiftConfig); + QFETCH(QStringList, controlConfig); + group.writeEntry("Meta", metaConfig); + group.writeEntry("Alt", altConfig); + group.writeEntry("Shift", shiftConfig); + group.writeEntry("Control", controlConfig); + group.sync(); + workspace()->slotReconfigure(); + + // trigger once to verify the shortcut works + quint32 timestamp = 1; + QFETCH(int, modifier); + QVERIFY(!workspace()->globalShortcutsDisabled()); + kwinApp()->platform()->keyboardKeyPressed(modifier, timestamp++); + kwinApp()->platform()->keyboardKeyReleased(modifier, timestamp++); + QCOMPARE(triggeredSpy.count(), 1); + triggeredSpy.clear(); + + // now disable global shortcuts + workspace()->disableGlobalShortcutsForClient(true); + QVERIFY(workspace()->globalShortcutsDisabled()); + // Should not get triggered + kwinApp()->platform()->keyboardKeyPressed(modifier, timestamp++); + kwinApp()->platform()->keyboardKeyReleased(modifier, timestamp++); + QEXPECT_FAIL("", "BUG 370146", Continue); + QCOMPARE(triggeredSpy.count(), 0); + triggeredSpy.clear(); + + // enable again + workspace()->disableGlobalShortcutsForClient(false); + QVERIFY(!workspace()->globalShortcutsDisabled()); + // should get triggered again + kwinApp()->platform()->keyboardKeyPressed(modifier, timestamp++); + kwinApp()->platform()->keyboardKeyReleased(modifier, timestamp++); + QCOMPARE(triggeredSpy.count(), 1); +} + WAYLANDTEST_MAIN(ModifierOnlyShortcutTest) #include "modifier_only_shortcut_test.moc"