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
This commit is contained in:
Aleix Pol 2018-04-21 18:35:22 +02:00 committed by David Edmundson
parent 67acb21ab8
commit bec8493459
2 changed files with 23 additions and 0 deletions

View file

@ -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)

View file

@ -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,