diff options
| author | Mr. Goferito <goferito@gmail.com> | 2025-12-26 23:16:31 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-12-26 23:16:31 +0100 |
| commit | d7f26038ee2b44f3d02fe2a7556bafb91a02f46e (patch) | |
| tree | 19fdece1f863bcd549ca36f175f9c543edf66a26 /src/managers | |
| parent | 33df518f97b930316742736ecb07dc322da4c5d3 (diff) | |
keybinds: fix multikey binds breaking after scroll wheel events (#12638)
Diffstat (limited to 'src/managers')
| -rw-r--r-- | src/managers/KeybindManager.cpp | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index dbfa4558..2bfd2db6 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -647,16 +647,22 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP bool found = false; SDispatchResult res; - if (pressed) { - if (keycodeToModifier(key.keycode)) - m_mkMods.insert(key.keysym); - else - m_mkKeys.insert(key.keysym); - } else { - if (keycodeToModifier(key.keycode)) - m_mkMods.erase(key.keysym); - else - m_mkKeys.erase(key.keysym); + // Skip keysym tracking for events with no keysym (e.g., scroll wheel events). + // Scroll events have keysym=0 and are always "pressed" (never released), + // so without this check, 0 gets inserted into m_mkKeys and never removed, + // breaking multi-key binds (binds flag 's'). See issue #8699. + if (key.keysym != 0) { + if (pressed) { + if (keycodeToModifier(key.keycode)) + m_mkMods.insert(key.keysym); + else + m_mkKeys.insert(key.keysym); + } else { + if (keycodeToModifier(key.keycode)) + m_mkMods.erase(key.keysym); + else + m_mkKeys.erase(key.keysym); + } } for (auto& k : m_keybinds) { |
