#12075 NORM 13.1.0: Keyboard layouts not applied in 13.1.0 os1

Zarro Boogs per Child bugtracker at laptop.org
Wed Sep 5 12:43:15 EDT 2012


#12075: Keyboard layouts not applied in 13.1.0 os1
---------------------------------------+------------------------------------
           Reporter:  greenfeld        |       Owner:  dsd          
               Type:  defect           |      Status:  assigned     
           Priority:  normal           |   Milestone:  13.1.0       
          Component:  x window system  |     Version:  not specified
         Resolution:                   |    Keywords:               
        Next_action:  review           |    Verified:  0            
Deployment_affected:                   |   Blockedby:               
           Blocking:                   |  
---------------------------------------+------------------------------------
Changes (by dsd):

 * cc: pgf (added)
  * next_action:  diagnose => review


Comment:

 When GTK+ receives a key event it uses XGetKeyboardMapping() to figure out
 how to map a keycode into a keysym - which is effectively the application
 of the keymap. I presume other UI toolkits are similar.

 I haven't traced this right down to the roots, but I've gone far enough to
 draw a confident conclusion:

 ProcGetKeyboardMapping() calls PickKeyboard(client) in order to base its
 work on.

 PickKeyboard() finds the mouse pointer for the client window and then
 tries to find the master keyboard that it is linked with.  In this
 situation we always find the virtual core pointer as the pointer, and the
 virtual core keyboard as the keyboard (with or without kbdshim).

 However, what does get exposed in this codepath is that the kbdshim uinput
 input device is regarded as a slave of the virtual core pointer. And I
 guess the code that sees that we want to apply a key map is written to
 avoid applying a key map to a pointer device.

 Modifying kbdshim to expose separate uinput devices for keyboard/mouse has
 the intended effect: the kbdshim mouse becomes a slave of the core
 pointer, the kbdshim keyboard becomes a slave of the core keyboard, and
 udev-driven keyboard mappings take effect (solving this bug) - they must
 now be filtering correctly down to the core keyboard device.

 Attaching a patch for kbdshim which is needed to fix this (in addition to
 the olpc-session and udev changes mentioned above).

-- 
Ticket URL: <http://dev.laptop.org/ticket/12075#comment:4>
One Laptop Per Child <http://laptop.org/>
OLPC bug tracking system


More information about the Bugs mailing list