Fix altwin:swap_alt_win keymap option by querying XKB state#4521
Draft
Fix altwin:swap_alt_win keymap option by querying XKB state#4521
Conversation
Instead of manually tracking modifiers based on scan codes, query XKB's modifier state after each key event. This ensures XKB options like altwin:swap_alt_win are properly respected. - Add XKB modifier index caching in XkbMappingState constructor - Implement update_modifier_from_xkb_state() to query XKB for active modifiers - Track pressed scancodes to determine left/right modifier distinction - Remove reliance on modifier_from_xkb_scan_code() for modifier tracking Co-authored-by: mattkae <25062299+mattkae@users.noreply.github.com>
- Add comprehensive documentation for pressed_scancodes member - Expand comment for cached XKB modifier indices - Combine Alt and Meta modifier loops into single iteration for better performance - Pre-check if Alt/Meta are active before iterating pressed scancodes Co-authored-by: mattkae <25062299+mattkae@users.noreply.github.com>
- Use find() instead of count() for existence checks (more efficient) - Add detailed comment explaining why we query keysyms for left/right detection Co-authored-by: mattkae <25062299+mattkae@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Fix altwin keymap option not affecting modifiers
Fix altwin:swap_alt_win keymap option by querying XKB state
Dec 9, 2025
39740d9 to
43ac49a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #???
Related: #???, https://..., ...
What's new?
Mir was tracking keyboard modifiers based on physical scan codes, which don't change when XKB options remap keys. With
altwin:swap_alt_win, pressing the Win key producedAlt_Lkeysym but Mir still reported Meta modifier active.Solution: Query XKB's internal modifier state using
xkb_state_mod_index_is_active()after each key event.Implementation
XkbMappingStateconstructor for Shift, Ctrl, Alt, Logo (Meta/Super), Caps, Numupdate_modifier_from_xkb_state()method queries XKB for active modifiers instead of manual scan code trackingpress_modifier()/release_modifier()calls with XKB state queries that respect all keymap optionsTechnical Details
When
altwin:swap_alt_winis active:xkb_state_mod_index_is_active(mod_index_alt)returns trueXKB_KEY_Alt_Lfor left/right distinctionHow to test
miral::Keymap("us++altwin:swap_alt_win")Checklist
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
esm.ubuntu.com/usr/lib/apt/methods/https /usr/lib/apt/methods/https(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
altwin:swap_alt_winkeymap option usingmiral::Keymaphas no effect on the modifiers #4356💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.