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

Reply via email to