[5665] in testers

home help back first fref pref prev next nref lref last post

Re: caps lock doesn't under gnome-terminal, 9.2.8

daemon@ATHENA.MIT.EDU (Robert A Basch)
Thu Jul 31 18:29:14 2003

From: Robert A Basch <rbasch@MIT.EDU>
To: testers@mit.edu
Cc: Angie Kelic <sly@mit.edu>
In-Reply-To: <1059084170.20711.23.camel@abulia.mit.edu>
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
Message-Id: <1059690552.27224.34.camel@abulia.mit.edu>
Mime-Version: 1.0
Date: 31 Jul 2003 18:29:13 -0400

> I looked into this -- it seems that both caps lock and num
> lock are broken in the gdk library when the XKEYBOARD extension
> is not used, as is the case on Solaris.  This appears to be
> the result of a rewrite of the relevant code for looking up
> a key symbol, in response to bug 93575 in gnome bugzilla.
> (That bug dealt with the Compose key not working, and the fix
> replaced the use of XLookupString() with newly written code
> which does the key translation itself).  Unfortunately, I
> don't see an obvious flaw in the new code; there are related
> bug reports filed, so I will submit additional comments.

Nobody responded to my comments, so I took a closer look at the
code, and at X documentation on how to do keysym translation.
I found several problems with the gdk code:

    * Keysym translation when Num Lock is on is broken.

    * It fails to determine the keysym for the Lock modifier, which
      should be used to distinguish between Shift Lock and Caps Lock.

    * Even with the previous problem fixed, translation in the Caps
      Lock case is incorrect.

I am working on a patch which attempts to correct these problems.

In addition, I found that the Sun X server does Num Lock handling
in a non-standard way.  Normally, the keysym to use for a keypad
key when Num Lock is on is the second element in the array for that
keycode; however, in the Sun implementation, it is the third element.
(I verified that the version of XLookupString() in the Openwindows
X library functions accordingly).  As far as I can tell, the only
feasible way to deal with this is to hack the code to determine
whether it is dealing with a Sun X server.

home help back first fref pref prev next nref lref last post