For a DEVCHANGE_KEYBOARD_EVENT the MASTER_KEYBOARD gets choosen in CreateClassesChangedEvent() to create a DeviceChangedEvent, regardless of the real attached master.
That doesn't work if the event occured at a XIKeyClass of a slave pointer as it gets dropped if the attached master is not the same as the master in the DeviceChangedEvent in ChangeMasterDeviceClasses() and we never see a DeviceChangedEvent (reason:SlaveSwitch). (A slave pointer with a XIKeyClass could be Logitech Unifying Device.) So, don't guess the master upon the DEVCHANGE type and use the attached master instead. Signed-off-by: Daniel Martin <[email protected]> --- dix/getevents.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/dix/getevents.c b/dix/getevents.c index ffa89fa..bab5ac3 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -706,10 +706,7 @@ UpdateFromMaster(InternalEvent *events, DeviceIntPtr dev, int type, { DeviceIntPtr master; - master = - GetMaster(dev, - (type & DEVCHANGE_POINTER_EVENT) ? MASTER_POINTER : - MASTER_KEYBOARD); + master = GetMaster(dev, MASTER_ATTACHED); if (master && master->last.slave != dev) { CreateClassesChangedEvent(events, master, dev, -- 1.9.1 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
