diff --git a/autotests/integration/tabbox_test.cpp b/autotests/integration/tabbox_test.cpp --- a/autotests/integration/tabbox_test.cpp +++ b/autotests/integration/tabbox_test.cpp @@ -127,9 +127,7 @@ // release alt kwinApp()->platform()->keyboardKeyReleased(KEY_LEFTALT, timestamp++); - QEXPECT_FAIL("", "bug 368590", Continue); QCOMPARE(tabboxClosedSpy.count(), 1); - QEXPECT_FAIL("", "bug 368590", Continue); QCOMPARE(TabBox::TabBox::self()->isGrabbed(), false); // release caps lock diff --git a/input.cpp b/input.cpp --- a/input.cpp +++ b/input.cpp @@ -745,8 +745,11 @@ return false; } waylandServer()->seat()->setFocusedKeyboardSurface(nullptr); - if (event->type() == QEvent::KeyPress) + if (event->type() == QEvent::KeyPress) { TabBox::TabBox::self()->keyPress(event->modifiers() | event->key()); + } else if (input()->keyboard()->xkb()->modifiersRelevantForGlobalShortcuts() == Qt::NoModifier) { + TabBox::TabBox::self()->modifiersReleased(); + } return true; } bool wheelEvent(QWheelEvent *event) override { diff --git a/tabbox/tabbox.h b/tabbox/tabbox.h --- a/tabbox/tabbox.h +++ b/tabbox/tabbox.h @@ -181,6 +181,7 @@ int previousDesktopStatic(int iDesktop) const; void keyPress(int key); void keyRelease(const xcb_key_release_event_t *ev); + void modifiersReleased(); bool forcedGlobalMouseGrab() const { return m_forcedGlobalMouseGrab; @@ -243,7 +244,6 @@ private Q_SLOTS: void reconfigure(); void globalShortcutChanged(QAction *action, const QKeySequence &seq); - void modifiersChanged(Qt::KeyboardModifiers mods); private: TabBoxMode m_tabBoxMode; diff --git a/tabbox/tabbox.cpp b/tabbox/tabbox.cpp --- a/tabbox/tabbox.cpp +++ b/tabbox/tabbox.cpp @@ -36,6 +36,7 @@ #include "client.h" #include "effects.h" #include "input.h" +#include "keyboard_input.h" #include "focuschain.h" #include "screenedge.h" #include "screens.h" @@ -498,8 +499,6 @@ m_tabBoxMode = TabBoxDesktopMode; // init variables connect(&m_delayedShowTimer, SIGNAL(timeout()), this, SLOT(show())); connect(Workspace::self(), SIGNAL(configChanged()), this, SLOT(reconfigure())); - - connect(input(), &InputRedirection::keyboardModifiersChanged, this, &TabBox::modifiersChanged); } TabBox::~TabBox() @@ -1076,7 +1075,7 @@ static bool areModKeysDepressedWayland(const QKeySequence &seq) { const int mod = seq[seq.count()-1] & Qt::KeyboardModifierMask; - const Qt::KeyboardModifiers mods = input()->keyboardModifiers(); + const Qt::KeyboardModifiers mods = input()->keyboard()->xkb()->modifiersRelevantForGlobalShortcuts(); if ((mod & Qt::SHIFT) && mods.testFlag(Qt::ShiftModifier)) { return true; } @@ -1570,9 +1569,9 @@ } } -void TabBox::modifiersChanged(Qt::KeyboardModifiers mods) +void TabBox::modifiersReleased() { - if (m_noModifierGrab || !(!mods)) { + if (m_noModifierGrab) { return; } if (m_tabGrab) {