Comment 10 for bug 6874

Revision history for this message
In , Andrew Suffield (asuffield) wrote : alt modifier issues

Figured out the cause of the problem, if not the "right"
solution. It's this change (-4 to -5):

diff -ru ./symbols/pc/pc /etc/X11/xkb/symbols/pc/pc
--- ./symbols/pc/pc 2004-05-29 08:51:29.000000000 +0100
+++ /etc/X11/xkb/symbols/pc/pc 2004-06-16 08:12:52.000000000 +0100
@@ -170,13 +170,28 @@
     key <KPDL> { [ KP_Delete, KP_Decimal ] };
     // End "Keypad" section

-
     // begin modifier mappings
     modifier_map Shift { Shift_L, Shift_R };
     modifier_map Lock { Caps_Lock, ISO_Lock };
     modifier_map Control{ Control_L, Control_R };
- modifier_map Mod1 { Alt_L, Alt_R };
     modifier_map Mod2 { Num_Lock };
+
+ // Fake keys for virtual<->real modifiers mapping
+ key <LVL3> { [ ISO_Level3_Shift ] };
+ key <MDSW> { [ Mode_switch ] };
+ modifier_map Mod5 { <LVL3>, <MDSW> };
+
+ key <ALT> { [ Alt_L ] };
+ modifier_map Mod1 { <ALT> };
+
+ key <META> { [ Meta_L ] };
+ modifier_map Mod1 { <META> };
+
+ key <SUPR> { [ Super_L ] };
+ modifier_map Mod4 { <SUPR> };
+
+ key <HYPR> { [ Hyper_L ] };
+ modifier_map Mod4 { <HYPR> };
 };

 // definition for the PC-AT type 101 key keyboard

What has happened here is that mod1 is now associated with keycode
<ALT> (a key which does not appear to exist on a PC keyboard) instead
of keysyms Alt_L and Alt_R.

Magic elsewhere in the keymap causes Alt_L and Alt_R to still generate
modifier state 1 - but that's not enough. Here's what KDE wants to do:

KeyPress mod1-TAB: display the window selection widget, and shift to
                   the next window, focussing it

KeyRelease mod1: remove the window selection widget, raise the
                 focussed window

Here's what they actually see:

KeyPress Alt_L: (no binding, ignored)
KeyPress mod1-TAB: <...>
KeyRelease mod1-TAB: (no binding, ignored)
KeyRelease Alt_L: (no binding, ignored)

Since Alt_L is not part of mod1 (it just happens to coincidentally
generate it inside XKB).

I'm not really sure what the right fix to this is, because I don't
understand why the change was made in the first place. Absent a better
explanation, I'd back out this change:

- modifier_map Mod1 { Alt_L, Alt_R };

Restoring that line should fix the problem.

--
  .''`. ** Debian GNU/Linux ** | Andrew Suffield
 : :' : http://www.debian.org/ |
 `. `' |
   `- -><- |