diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2011-11-29 16:15:37 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2012-01-03 11:24:46 +1000 |
commit | 20efd3c15829d8fbb3610d5af41b67a627e63d21 (patch) | |
tree | 14e90c97131aff01f3727e7a706af8307803529b | |
parent | cf296f2eeffe4b438e9378268f84a1f63c555e52 (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.c | 15 |
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) |