On Mon, Jan 13, 2003 at 12:07:10PM -0200, Mauro Carvalho Chehab wrote:
I've been studying this quite a bit. With this patch, I've verifyed that
some of the dead keys work, and some not. If I change the IS keymap
so Im using dead_circumflex instead of dead_acute, then dead (accented)
characters do work, but obviously not the right ones.
This leads me to think that dead_acute characters are handled differently
by wine than dead_circumflex characters are.
Mauro, do you think I could be on to something here ?
Rikki,
As far as I know, wine keyboard.c uses XFree86 Keymap table to
compare your key definitions with their internal geometry. After that,
it maps every scan code to a virtual key. The virtual key is mapped
back to a scan code and to an unicode symbol by ToUnicode function.
During this proccess, it uses part of the original xfree mapping.
On the original ToUnicode function, it uses the function
XLookupString (a Xlib function) to map scan code->symbol. This function
is capable to work with latin characters, but it doesn't implement dead
keys translation on the current XFree86 implementations. In the past,
there was some Xlib hacking that changes this behavor (X11 R5
implementations). The new standard (X11 R6) creates the xkb extensions,
that provides new functions to treat locale imput data (XmbLookupString,
Xutf8LookupString and XwcLookupString). What it does is to use XFree86
locale settings to make this map.
The dead key treatment is defined on /usr/X11R6/lib/X11/locale.
The geometry of their keyboards, used by xkb, are on
/usr/X11R6/lib/X11/xkb (RedHat) or /etc/X11/xkb (Mandrake). The file
symbols/is, for example, contains some icelandic definitions.
From your answer, I would try to fix the XFree86 keyboard mapping on
symbols/is. I guess that this will solve both XFree and Wine (patched).