Fix cursor jumping away when switching keyboard layout#211
Open
Radomir-Aksenenko wants to merge 2 commits intoSkEditorTeam:dev/devfrom
Open
Fix cursor jumping away when switching keyboard layout#211Radomir-Aksenenko wants to merge 2 commits intoSkEditorTeam:dev/devfrom
Radomir-Aksenenko wants to merge 2 commits intoSkEditorTeam:dev/devfrom
Conversation
…ft+Alt) Fix editor losing focus and cursor position when switching keyboard layout ## Problem Non-English speaking users who work with multiple keyboard layouts (e.g., English + Russian, English + German, English + Chinese, etc.) experienced a frustrating issue when switching between languages using the standard Windows keyboard shortcut Shift+Alt (or alternative combinations). Every time users switched their input language while typing in the editor, the text cursor would jump away from the current line, losing its position. This forced users to: 1. Stop their workflow 2. Manually click back into the editor 3. Navigate back to where they were typing 4. Continue working For users who frequently switch between languages (which is very common when writing code with comments in native language, or working with multilingual content), this could happen dozens of times per session, severely impacting productivity and causing significant frustration. ## Root Cause When pressing Shift+Alt to switch keyboard layout in Windows, the OS generates a KeyUp event for the Alt key after the layout switch completes. In Avalonia (and WPF), a standalone Alt key press activates the application's main menu bar, which steals keyboard focus from the TextEditor control. ## Solution Added a KeyUp event handler with tunnel routing strategy in MainWindow that intercepts the Alt key release event before it reaches the menu. When the editor has focus, the event is marked as handled, preventing menu activation and preserving cursor position. This fix specifically targets the keyboard layout switching scenario while maintaining normal Alt key functionality for menu access when the editor is not focused. Affects all Windows users with multiple keyboard layouts configured.
Hey! Taking another shot at this after your feedback on the previous PR. You were right - blocking all Alt keypresses was a bad idea. So I rewrote it completely. Now it only kicks in when you actually use a layout switch combo (Alt+Shift or Ctrl+Shift), not when you're just trying to open the menu. Basically I track when these combos are pressed (KeyDown) and only then block the menu activation on KeyUp. Regular Alt still works fine for accessing menus. I use Russian + English daily so this bug was driving me crazy, had to fix it myself instead of waiting. Tested it pretty thoroughly - layout switching works, menu shortcuts work, everything seems good. Let me know if there's anything else to tweak!
Member
|
Hey, sorry for the delayed response! |
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.
Hey! Taking another shot at this after your feedback on the previous PR.
You were right - blocking all Alt keypresses was a bad idea. So I rewrote it
completely. Now it only kicks in when you actually use a layout switch combo
(Alt+Shift or Ctrl+Shift), not when you're just trying to open the menu.
Basically I track when these combos are pressed (KeyDown) and only then block
the menu activation on KeyUp. Regular Alt still works fine for accessing menus.
I use Russian + English daily so this bug was driving me crazy, had to fix it
myself instead of waiting. Tested it pretty thoroughly - layout switching works,
menu shortcuts work, everything seems good.