[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kwin/Plasma/5.12] /: Don't try to filter null key combinations
From:       David Edmundson <null () kde ! org>
Date:       2018-04-24 14:35:37
Message-ID: E1fAz2f-00082e-El () code ! kde ! org
[Download RAW message or body]

Git commit bec8493459d5e15272a4fd07a84b35896b47ce69 by David Edmundson, on behalf of \
Aleix Pol. Committed on 24/04/2018 at 14:35.
Pushed by davidedmundson into branch 'Plasma/5.12'.

Don't try to filter null key combinations

Summary:
When using composite key combinations, kwin would do random weird
actions when the first key was pressed (e.g. ` key). This makes sure we
are not trying to match.

BUG: 390110

Reviewers: #kwin, graesslin

Reviewed By: #kwin, graesslin

Subscribers: graesslin, kwin, #kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D12416

M  +20   -0    autotests/integration/globalshortcuts_test.cpp
M  +3    -0    globalshortcuts.cpp

https://commits.kde.org/kwin/bec8493459d5e15272a4fd07a84b35896b47ce69

diff --git a/autotests/integration/globalshortcuts_test.cpp \
b/autotests/integration/globalshortcuts_test.cpp index 6a4024f00..c17721bd1 100644
--- a/autotests/integration/globalshortcuts_test.cpp
+++ b/autotests/integration/globalshortcuts_test.cpp
@@ -55,6 +55,7 @@ private Q_SLOTS:
     void testRepeatedTrigger();
     void testUserActionsMenu();
     void testMetaShiftW();
+    void testComponseKey();
     void testX11ClientShortcut();
     void testWaylandClientShortcut();
     void testSetupWindowShortcut();
@@ -203,6 +204,25 @@ void GlobalShortcutsTest::testMetaShiftW()
     kwinApp()->platform()->keyboardKeyReleased(KEY_LEFTMETA, timestamp++);
 }
 
+void GlobalShortcutsTest::testComponseKey()
+{
+    // BUG 390110
+    QScopedPointer<QAction> action(new QAction(nullptr));
+    action->setProperty("componentName", QStringLiteral(KWIN_NAME));
+    action->setObjectName(QStringLiteral("globalshortcuts-accent"));
+    QSignalSpy triggeredSpy(action.data(), &QAction::triggered);
+    QVERIFY(triggeredSpy.isValid());
+    KGlobalAccel::self()->setShortcut(action.data(), \
QList<QKeySequence>{Qt::UNICODE_ACCEL}, KGlobalAccel::NoAutoloading); +    \
input()->registerShortcut(Qt::UNICODE_ACCEL, action.data()); +
+    // press & release `
+    quint32 timestamp = 0;
+    kwinApp()->platform()->keyboardKeyPressed(KEY_RESERVED, timestamp++);
+    kwinApp()->platform()->keyboardKeyReleased(KEY_RESERVED, timestamp++);
+
+    QTRY_COMPARE(triggeredSpy.count(), 0);
+}
+
 struct XcbConnectionDeleter
 {
     static inline void cleanup(xcb_connection_t *pointer)
diff --git a/globalshortcuts.cpp b/globalshortcuts.cpp
index 89fc63235..970c79fbf 100644
--- a/globalshortcuts.cpp
+++ b/globalshortcuts.cpp
@@ -245,6 +245,9 @@ bool processShortcut(Qt::KeyboardModifiers mods, T key, U \
&shortcuts)  bool GlobalShortcutsManager::processKey(Qt::KeyboardModifiers mods, int \
keyQt)  {
     if (m_kglobalAccelInterface) {
+        if (!keyQt && !mods) {
+            return false;
+        }
         auto check = [this] (Qt::KeyboardModifiers mods, int keyQt) {
             bool retVal = false;
             QMetaObject::invokeMethod(m_kglobalAccelInterface,


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic