plugins/stickykeys: Unlatch modifiers when locking
The state should be either latched or locked, not both
This commit is contained in:
parent
85b5048e72
commit
19bf66c42a
3 changed files with 4 additions and 2 deletions
|
@ -191,7 +191,7 @@ void StickyKeysTest::testLock()
|
||||||
Test::keyboardKeyPressed(modifierKey, ++timestamp);
|
Test::keyboardKeyPressed(modifierKey, ++timestamp);
|
||||||
QVERIFY(modifierSpy.wait());
|
QVERIFY(modifierSpy.wait());
|
||||||
QCOMPARE(modifierSpy.first()[0], expectedMods); // verify that mod is depressed
|
QCOMPARE(modifierSpy.first()[0], expectedMods); // verify that mod is depressed
|
||||||
// TODO should it be latched?
|
QCOMPARE(modifierSpy.first()[1], 0); // verify that mod is unlatched
|
||||||
QCOMPARE(modifierSpy.first()[2], expectedMods); // verify that mod is locked
|
QCOMPARE(modifierSpy.first()[2], expectedMods); // verify that mod is locked
|
||||||
|
|
||||||
// release mod, modifier should still be locked
|
// release mod, modifier should still be locked
|
||||||
|
@ -212,6 +212,7 @@ void StickyKeysTest::testLock()
|
||||||
Test::keyboardKeyPressed(modifierKey, ++timestamp);
|
Test::keyboardKeyPressed(modifierKey, ++timestamp);
|
||||||
QVERIFY(modifierSpy.wait());
|
QVERIFY(modifierSpy.wait());
|
||||||
QCOMPARE(modifierSpy.first()[0], expectedMods); // verify that mod is depressed
|
QCOMPARE(modifierSpy.first()[0], expectedMods); // verify that mod is depressed
|
||||||
|
QCOMPARE(modifierSpy.first()[1], 0); // verify that mod is unlatched
|
||||||
QCOMPARE(modifierSpy.first()[2], 0); // verify that mod is not locked
|
QCOMPARE(modifierSpy.first()[2], 0); // verify that mod is not locked
|
||||||
|
|
||||||
Test::keyboardKeyReleased(modifierKey, ++timestamp);
|
Test::keyboardKeyReleased(modifierKey, ++timestamp);
|
||||||
|
|
|
@ -108,6 +108,7 @@ bool StickyKeysFilter::keyEvent(KWin::KeyEvent *event)
|
||||||
// A latched modifier was pressed, lock it
|
// A latched modifier was pressed, lock it
|
||||||
else if (keyState.value() == Latched && m_lockKeys) {
|
else if (keyState.value() == Latched && m_lockKeys) {
|
||||||
keyState.value() = Locked;
|
keyState.value() = Locked;
|
||||||
|
KWin::input()->keyboard()->xkb()->setModifierLatched(keyToModifier(static_cast<Qt::Key>(event->key())), false);
|
||||||
KWin::input()->keyboard()->xkb()->setModifierLocked(keyToModifier(static_cast<Qt::Key>(event->key())), true);
|
KWin::input()->keyboard()->xkb()->setModifierLocked(keyToModifier(static_cast<Qt::Key>(event->key())), true);
|
||||||
|
|
||||||
if (m_showNotificationForLockedKeys) {
|
if (m_showNotificationForLockedKeys) {
|
||||||
|
|
|
@ -1086,7 +1086,7 @@ void Xkb::setModifierLocked(KWin::Xkb::Modifier mod, bool locked)
|
||||||
if (mask.size() > modifier) {
|
if (mask.size() > modifier) {
|
||||||
mask[modifier] = locked;
|
mask[modifier] = locked;
|
||||||
m_modifierState.locked = mask.to_ulong();
|
m_modifierState.locked = mask.to_ulong();
|
||||||
xkb_state_update_mask(m_state, m_modifierState.depressed, m_modifierState.locked, m_modifierState.locked, 0, 0, m_currentLayout);
|
xkb_state_update_mask(m_state, m_modifierState.depressed, m_modifierState.latched, m_modifierState.locked, 0, 0, m_currentLayout);
|
||||||
m_modifierState.locked = xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LOCKED));
|
m_modifierState.locked = xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LOCKED));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue