XGetKeyboardMapping()

Peter Hutterer peter.hutterer at who-t.net
Sun Jul 4 16:32:52 PDT 2010


On Fri, Jul 02, 2010 at 01:22:36PM -0400, Trevor Woerner wrote:
> Hi,
> 
> I have a situation where I have the user pass in a string which I then
> send to a window using XTestFakeKeyEvent(). XTestFakeKeyEvent() takes
> a KeyCode (as opposed to a KeySym) so I need to also simulate keyboard
> modifier states as well (e.g. Shift). According to chapter 9 of the
> O'Reilly Xlib Programming Manual (Volume One) I can use
> XGetKeyboardMapping() to get from the server an array of the symbols
> which will be generated by a given KeyCode with various combinations
> of keyboard modifiers in effect:
> 
> <quote>
> For each keycode, the server defines a list of keysyms, corresponding
> to the key pressed while various modifier keys are being held. There
> are conventions for the meanings of the first two keysyms in the list.
> The first keysym in the list for a particular key should be construed
> as the symbol corresponding to a KeyPress when no modifier keys are
> down. The second keysym in the list, if present, usually should be
> construed as the symbol when the Shift or Shift Lock modifier keys are
> down.
> </quote>
> 
> Is there a way to make this less wishy-washy? Instead of hoping the
> second one is for shift, is there no way to know for sure that it is,
> and code it in such a way that if the Shift result is somewhere else
> in the list the code would find it anyway? The server knows how it is
> filling the returned array, is there no way to tap into that to know
> for sure that 0 is no modifier and 1 is shifted? As it is my code has
> "magic" values in them of 0 and 1 for the two states I'm interested
> in. Luckily I'm only interested in the states "no modifier" and
> "shift". Is there at least a #define somewhere I could use instead of
> 0 and 1?

this is one of the reasons the XKB extension was developed. Since keyboards
are almost always initialized with XKB keymaps these days, you need to use
XKB as well to get the right modifier list.

Cheers,
  Peter


More information about the xorg-devel mailing list