[plugins/stickykeys] Unlatch keys when deactivating sticky keys

Otherwise when deactivating sticky keys while a modifier is latched
it will stay latched forever with no way to unlatch
remotes/origin/work/d_ed/ci_scaling_test
Nicolas Fella 3 years ago committed by Vlad Zahorodnii
parent 1187f3c624
commit dd604c8e42
  1. 28
      src/plugins/stickykeys/stickykeys.cpp

@ -24,15 +24,6 @@ StickyKeysFilter::StickyKeysFilter()
}
}
void StickyKeysFilter::loadConfig(const KConfigGroup &group)
{
KWin::input()->uninstallInputEventFilter(this);
if (group.readEntry<bool>("StickyKeys", false)) {
KWin::input()->prependInputEventFilter(this);
}
}
Qt::KeyboardModifier keyToModifier(Qt::Key key)
{
if (key == Qt::Key_Shift) {
@ -50,6 +41,23 @@ Qt::KeyboardModifier keyToModifier(Qt::Key key)
return Qt::NoModifier;
}
void StickyKeysFilter::loadConfig(const KConfigGroup &group)
{
KWin::input()->uninstallInputEventFilter(this);
if (group.readEntry<bool>("StickyKeys", false)) {
KWin::input()->prependInputEventFilter(this);
} else {
// sticky keys are deactivated, unlatch all latched keys
for (auto it = m_keyStates.keyValueBegin(); it != m_keyStates.keyValueEnd(); ++it) {
if (it->second != KeyState::None) {
it->second = KeyState::None;
KWin::input()->keyboard()->xkb()->setModifierLatched(keyToModifier((Qt::Key)it->first), false);
}
}
}
}
bool StickyKeysFilter::keyEvent(KWin::KeyEvent *event)
{
if (m_modifiers.contains(event->key())) {
@ -65,7 +73,7 @@ bool StickyKeysFilter::keyEvent(KWin::KeyEvent *event)
for (auto it = m_keyStates.keyValueBegin(); it != m_keyStates.keyValueEnd(); ++it) {
it->second = KeyState::None;
KWin::input()->keyboard()->xkb()->setModifierLatched(keyToModifier((Qt::Key)it->first), false);
KWin::input()->keyboard()->xkb()->setModifierLatched(keyToModifier(static_cast<Qt::Key>(it->first)), false);
}
}

Loading…
Cancel
Save