[PATCH 1/3] dix: Use attached master in DeviceChangedEvent

Daniel Martin consume.noise at gmail.com
Sun Mar 23 07:31:55 PDT 2014


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 <consume.noise at gmail.com>
---
 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



More information about the xorg-devel mailing list