On Thu, Jun 10, 2010 at 12:21:36PM +1000, Peter Hutterer wrote:
> The modifier key count is maintained by the XKB layer and
> increased/decreased for all modifiers that set state.
> 
> Test case, MD/SD modifier key count in comment:
> 1. keyboard 1: press and hold Shift_L    # SD:1     MD:1
> 2. keyboard 2: press and release Shift_L # SD:1,0   MD:1,0
> <class copy happens>                     # SD:1     MD:1
> 3. keyboard 1: release Shift_L           # SD:0     MD:1
> 4. keyboard 1: press and release Shift_L # SD:1,0   MD:2,1
> 
> The modifier is now logically down on the MD but not on keyboard 1 or
> keyboard 2.
> 
> XKB is layered in before the DIX, it increases/decreases the modifier key
> count accordingly. In the above example, during (2), the MD gets the key
> release and thus clears the modifier bit. (3) doesn't forward the release to
> the MD because it is already cleared. The copy of modifierKeysDown when the
> lastSlave changes however increases the counter for the held key. On (4),
> the press and release are both forwarded to the MD, causing a offset by 1
> and thus do not clear the logical modifier state.
> 
> X.Org Bug 25480 <http://bugs.freedesktop.org/show_bug.cgi?id=25480>
> 
> Signed-off-by: Peter Hutterer <[email protected]>

Makes sense to me.  I'm not quite caffeinated enough to say if this is
authoritively correct, but it's certainly less incorrect than the
current behaviour.

Acked-by: Daniel Stone <[email protected]>

Cheers,
Daniel

Attachment: signature.asc
Description: Digital signature

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to