[PATCH resend] input: Only release SD buttons for explicit floating/reattachment (#36146)

Peter Hutterer peter.hutterer at who-t.net
Tue May 3 17:12:36 PDT 2011


Grabbing an SD device temporary floats the device but we must not release
the buttons. Introduced in

    commit 9d23459415b84606ee4f38bb2d19054c432c8552
    Author: Peter Hutterer <peter.hutterer at who-t.net>
    Date:   Fri Feb 25 11:08:19 2011 +1000

    dix: release all buttons and keys before reattaching a device (#34182)

X.Org Bug 36146 <http://bugs.freedesktop.org/show_bug.cgi?id=36146>

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 Xi/xichangehierarchy.c |    2 ++
 dix/devices.c          |    4 +---
 include/input.h        |    2 ++
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/Xi/xichangehierarchy.c b/Xi/xichangehierarchy.c
index 0736a5a..96ead6f 100644
--- a/Xi/xichangehierarchy.c
+++ b/Xi/xichangehierarchy.c
@@ -355,6 +355,7 @@ detach_slave(ClientPtr client, xXIDetachSlaveInfo *c, int flags[MAXDEVICES])
         goto unwind;
     }
 
+    ReleaseButtonsAndKeys(dev);
     AttachDevice(client, dev, NULL);
     flags[dev->id] |= XISlaveDetached;
 
@@ -406,6 +407,7 @@ attach_slave(ClientPtr client, xXIAttachSlaveInfo *c,
         goto unwind;
     }
 
+    ReleaseButtonsAndKeys(dev);
     AttachDevice(client, dev, newmaster);
     flags[dev->id] |= XISlaveAttached;
 
diff --git a/dix/devices.c b/dix/devices.c
index 9d4fda2..9a4498b 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -2365,7 +2365,7 @@ RecalculateMasterButtons(DeviceIntPtr slave)
  * Generate release events for all keys/button currently down on this
  * device.
  */
-static void
+void
 ReleaseButtonsAndKeys(DeviceIntPtr dev)
 {
     InternalEvent*      eventlist = InitEventList(GetMaximumEventsNum());
@@ -2434,8 +2434,6 @@ AttachDevice(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr master)
         free(dev->spriteInfo->sprite);
     }
 
-    ReleaseButtonsAndKeys(dev);
-
     oldmaster = GetMaster(dev, MASTER_ATTACHED);
     dev->master = master;
 
diff --git a/include/input.h b/include/input.h
index 81c9dfb..1c0065f 100644
--- a/include/input.h
+++ b/include/input.h
@@ -501,6 +501,8 @@ extern _X_EXPORT int GetMotionHistory(
     ScreenPtr pScreen,
     BOOL core);
 
+extern void ReleaseButtonsAndKeys(DeviceIntPtr dev);
+
 extern int AttachDevice(ClientPtr client,
                         DeviceIntPtr slave,
                         DeviceIntPtr master);
-- 
1.7.4.4


More information about the xorg-devel mailing list