OpenSolaris

Printable Version Enter a New Search
Bug ID 6226733
Synopsis ISO_Lock keys missing from IsModifierKey macro in Xutils.h
State 10-Fix Delivered (Fix available in build)
Category:Subcategory xserver:client_libs
Keywords
Responsible Engineer Alan Coopersmith
Reported Against
Duplicate Of
Introduced In
Commit to Fix snv_10
Fixed In snv_10
Release Fixed solaris_nevada(snv_10) , solaris_10u1(s10u1_08) (Bug ID:2126281)
Related Bugs
Submit Date 8-February-2005
Last Update Date 16-January-2007
Description
There are several problems with the AltGr key in xemacs, when the Xorg
server is used and a PS/2 keyboard with german keyboard layout is used
(XkbModel pc105,XkbLayout de).

The following key sequences produce an xemacs error message that
"iso-level3-shift is not defined". Annoying (xemacs beeps and flashes
whenever AltGr is pressed), but otherwise the key sequence is working
as expected.

AltGr+7 -> {
AltGr+8 -> [
AltGr+9 -> ]
AltGr+0 -> }

Another problematic key sequence: Control-X ` (the ` key is typed as
AltGr+# with a german keyboard layout).  Control-X ` is bound to
"next-error" in Xemacs.  This fails with an error that "C-X iso-level3-shift 
is not defined" - and the "next-error" function is *not* invoked.

Problem seems to be the new Xorg modifier key "ISO_Level3_Shift",
keysym 0xfe03 (when the /usr/X11/lib/X11/xkb/symbols/pc/* symbol mappings
are active, which seems to be the Xorg default with most PS/2 "pc"
keyboard layouts)

XEmacs tries to use the IsModifierKey() macro defined in <Xutil.h> to
detect keypress/keyrelease events for modifier keys.  Modifier key
events are ignored my xemacs.

Apparently "ISO_Level3_Shift" should be ignored, but isn't.
Reason:

Solaris /usr/openwin/include/X11/Xutil.h:

#define IsModifierKey(keysym) \
  ((((KeySym)(keysym) >= XK_Shift_L) && ((KeySym)(keysym) <=
XK_Hyper_R)) \
   || ((KeySym)(keysym) == XK_Mode_switch) \
   || ((KeySym)(keysym) == XK_Num_Lock))


XFree86 xc/lib/X11/Xutil.h:

#define IsModifierKey(keysym) \
  ((((KeySym)(keysym) >= XK_Shift_L) && ((KeySym)(keysym) <=
XK_Hyper_R)) \
   || (((KeySym)(keysym) >= XK_ISO_Lock) && \
       ((KeySym)(keysym) <= XK_ISO_Last_Group_Lock)) \
   || ((KeySym)(keysym) == XK_Mode_switch) \
   || ((KeySym)(keysym) == XK_Num_Lock))


(where XK_ISO_Lock == 0xFE01, XK_ISO_Last_Group_Lock == 0xFE0F)

[reported on  xxxxx@xxxxx.com by Juergen Keil]
 xxxxx@xxxxx.com 2005-2-08 17:34:16 GMT
Work Around
[Workarounds provided by bug reporter Juergen Keil]
Workaround: add the layout "de" to $oldlayouts in
/usr/X11/lib/X11/xkb/rules/xorg . With that change Xorg uses a keysym
mapping using the "Mode_switch" keysym mapped to the ALT-Right key,
not "ISO_Level3_Shift" - this is compatible to Xsun keyboard mappings.


Alternate Workaround: add the following to
/usr/X11/lib/X11/xkb/rules/xorg:

 $pcmodels de           =       en_US(%m)+%l(nodeadkeys)
 xxxxx@xxxxx.com 2005-2-08 17:34:16 GMT
Comments
N/A