summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2011-11-29 16:15:37 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2012-01-03 11:24:46 +1000
commit20efd3c15829d8fbb3610d5af41b67a627e63d21 (patch)
tree14e90c97131aff01f3727e7a706af8307803529b
parentcf296f2eeffe4b438e9378268f84a1f63c555e52 (diff)
Xi: when removing a device, reset ClientPointers where needed
if a client had the to-be-removed device as ClientPointer, reset to NULL. Fixes #43165 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com> (cherry picked from commit d2ebbcdaf6b13d70eee704b1764ff349e1be22a0)
-rw-r--r--Xi/xichangehierarchy.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/Xi/xichangehierarchy.c b/Xi/xichangehierarchy.c
index 96ead6fcd..dfcd52fd0 100644
--- a/Xi/xichangehierarchy.c
+++ b/Xi/xichangehierarchy.c
@@ -203,6 +203,19 @@ unwind:
}
static int
+disable_clientpointer(DeviceIntPtr dev)
+{
+ int i;
+
+ for (i = 0; i < currentMaxClients; i++)
+ {
+ ClientPtr client = clients[i];
+ if (client && client->clientPtr == dev)
+ client->clientPtr = NULL;
+ }
+}
+
+static int
remove_master(ClientPtr client, xXIRemoveMasterInfo *r,
int flags[MAXDEVICES])
{
@@ -252,6 +265,8 @@ remove_master(ClientPtr client, xXIRemoveMasterInfo *r,
if (rc != Success)
goto unwind;
+ disable_clientpointer(ptr);
+
/* Disabling sends the devices floating, reattach them if
* desired. */
if (r->return_mode == XIAttachToMaster)