gtk apps reading accelerator keystrokes incorrectly with alternative keymaps
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
control-center (Ubuntu) |
Invalid
|
Undecided
|
Ubuntu Desktop Bugs |
Bug Description
Binary package hint: gnome-control-
This is a pretty strange and complicated interaction. I'm using an up-to-date Dapper installation.
1. My low-level keymap is set to dvorak (whatever that means). That is, when I installed Ubuntu I told it I want to use dvorak. My keyboard is physically qwerty. Both my Linux console and X are using dvorak by default.
2. Without adding any alternate keymaps to the keyboard selector applet, everything works fine.
3. When I *add the option* to switch to qwerty via my keyboard indicator applet (something I occasionally do when pair-programming with other people), all gtk apps (gedit, gtimelog, gaim) stop reading keyboard accelerators correctly: When I hit ctrl-q, the app does not try to quit, when I hit ctrl-l, it does not clear the screen, etc -- HOWEVER, when I hit *ctrl-'* (ctrl and single quote), it tries to quit. When I hit ctrl-n it clears the screen. single-quote happens to be where the "q" key is physically on my keyboard "n" happens to be where the "l" key is physically on my keyboard. Note that I didn't actually *switch* to qwerty here, I just added the option to my keyboard selector.
All other apps, for instance emacs, do not get my keyboard accelerators confused.
Same here on Edgy with french/english keyboards, in gedit:
CTRL Q is using CTRL A action (french keyboard layout is azerty, qsdf...).
in gtk/gtkkeyhash.c hash_lookup( ) returns both exact matches and matches with a different keyboard group (it seems to be a feature).
_gtk_key_
As gedit TextView window doesn't have a binding for CTRL+Q it catches the 'q -> a' entry from group 1, cf gedit/gedit- window. c:gedit_ window_ key_press_ event() , and uses CTRL A binding.
#if 0 the partial match in _gtk_key_ hash_lookup( ) or #if 0 the key_press_ event() fix it.
gedit_window_
I don't understand the rational behind the partial match logic for keybinding, IMO it's confusing.