diff options
-rw-r--r-- | Xi/exevents.c | 2 | ||||
-rw-r--r-- | Xi/ungrdevb.c | 2 | ||||
-rw-r--r-- | Xi/ungrdevk.c | 2 | ||||
-rw-r--r-- | Xi/xipassivegrab.c | 2 | ||||
-rw-r--r-- | dix/events.c | 16 | ||||
-rw-r--r-- | dix/grabs.c | 10 | ||||
-rw-r--r-- | include/dixgrabs.h | 2 |
7 files changed, 20 insertions, 16 deletions
diff --git a/Xi/exevents.c b/Xi/exevents.c index 2495adee5..2feddd3b3 100644 --- a/Xi/exevents.c +++ b/Xi/exevents.c @@ -2844,7 +2844,7 @@ CheckDeviceGrabAndHintWindow(WindowPtr pWin, int type, (deliveryMask & DeviceButtonGrabMask)) { GrabPtr tempGrab; - tempGrab = AllocGrab(); + tempGrab = AllocGrab(NULL); if (!tempGrab) return; diff --git a/Xi/ungrdevb.c b/Xi/ungrdevb.c index c4632fadc..b02510ea0 100644 --- a/Xi/ungrdevb.c +++ b/Xi/ungrdevb.c @@ -127,7 +127,7 @@ ProcXUngrabDeviceButton(ClientPtr client) (stuff->modifiers & ~AllModifiersMask)) return BadValue; - temporaryGrab = AllocGrab(); + temporaryGrab = AllocGrab(NULL); if (!temporaryGrab) return BadAlloc; diff --git a/Xi/ungrdevk.c b/Xi/ungrdevk.c index 3273878d3..f98117168 100644 --- a/Xi/ungrdevk.c +++ b/Xi/ungrdevk.c @@ -134,7 +134,7 @@ ProcXUngrabDeviceKey(ClientPtr client) (stuff->modifiers & ~AllModifiersMask)) return BadValue; - temporaryGrab = AllocGrab(); + temporaryGrab = AllocGrab(NULL); if (!temporaryGrab) return BadAlloc; diff --git a/Xi/xipassivegrab.c b/Xi/xipassivegrab.c index 62a3a469f..eccec0ab8 100644 --- a/Xi/xipassivegrab.c +++ b/Xi/xipassivegrab.c @@ -307,7 +307,7 @@ ProcXIPassiveUngrabDevice(ClientPtr client) mod_dev = (IsFloating(dev)) ? dev : GetMaster(dev, MASTER_KEYBOARD); - tempGrab = AllocGrab(); + tempGrab = AllocGrab(NULL); if (!tempGrab) return BadAlloc; diff --git a/dix/events.c b/dix/events.c index dc503118a..cd2d9397e 100644 --- a/dix/events.c +++ b/dix/events.c @@ -1492,8 +1492,7 @@ ActivatePointerGrab(DeviceIntPtr mouse, GrabPtr grab, if (grab->cursor) grab->cursor->refcnt++; BUG_WARN(grabinfo->grab != NULL); - grabinfo->grab = AllocGrab(); - CopyGrab(grabinfo->grab, grab); + grabinfo->grab = AllocGrab(grab); grabinfo->fromPassiveGrab = isPassive; grabinfo->implicitGrab = autoGrab & ImplicitGrabMask; PostNewCursor(mouse); @@ -1596,8 +1595,7 @@ ActivateKeyboardGrab(DeviceIntPtr keybd, GrabPtr grab, TimeStamp time, else grabinfo->grabTime = time; BUG_WARN(grabinfo->grab != NULL); - grabinfo->grab = AllocGrab(); - CopyGrab(grabinfo->grab, grab); + grabinfo->grab = AllocGrab(grab); grabinfo->fromPassiveGrab = passive; grabinfo->implicitGrab = passive & ImplicitGrabMask; CheckGrabForSyncs(keybd, (Bool) grab->keyboardMode, @@ -1991,7 +1989,7 @@ ActivateImplicitGrab(DeviceIntPtr dev, ClientPtr client, WindowPtr win, else return FALSE; - tempGrab = AllocGrab(); + tempGrab = AllocGrab(NULL); if (!tempGrab) return FALSE; tempGrab->next = NULL; @@ -3898,7 +3896,7 @@ CheckPassiveGrabsOnWindow(WindowPtr pWin, if (!grab) return NULL; - tempGrab = AllocGrab(); + tempGrab = AllocGrab(NULL); /* Fill out the grab details, but leave the type for later before * comparing */ @@ -5087,7 +5085,7 @@ GrabDevice(ClientPtr client, DeviceIntPtr dev, else { GrabPtr tempGrab; - tempGrab = AllocGrab(); + tempGrab = AllocGrab(NULL); tempGrab->next = NULL; tempGrab->window = pWin; @@ -5443,7 +5441,7 @@ ProcUngrabKey(ClientPtr client) client->errorValue = stuff->modifiers; return BadValue; } - tempGrab = AllocGrab(); + tempGrab = AllocGrab(NULL); if (!tempGrab) return BadAlloc; tempGrab->resource = client->clientAsMask; @@ -5637,7 +5635,7 @@ ProcUngrabButton(ClientPtr client) ptr = PickPointer(client); - tempGrab = AllocGrab(); + tempGrab = AllocGrab(NULL); if (!tempGrab) return BadAlloc; tempGrab->resource = client->clientAsMask; diff --git a/dix/grabs.c b/dix/grabs.c index 0a2111d8a..f46a6b23a 100644 --- a/dix/grabs.c +++ b/dix/grabs.c @@ -189,7 +189,7 @@ UngrabAllDevices(Bool kill_client) } GrabPtr -AllocGrab(void) +AllocGrab(const GrabPtr src) { GrabPtr grab = calloc(1, sizeof(GrabRec)); @@ -201,6 +201,12 @@ AllocGrab(void) } } + if (src && !CopyGrab(grab, src)) { + free(grab->xi2mask); + free(grab); + grab = NULL; + } + return grab; } @@ -213,7 +219,7 @@ CreateGrab(int client, DeviceIntPtr device, DeviceIntPtr modDevice, { GrabPtr grab; - grab = AllocGrab(); + grab = AllocGrab(NULL); if (!grab) return (GrabPtr) NULL; grab->resource = FakeClientID(client); diff --git a/include/dixgrabs.h b/include/dixgrabs.h index eccec77f8..ca3c95be7 100644 --- a/include/dixgrabs.h +++ b/include/dixgrabs.h @@ -31,7 +31,7 @@ struct _GrabParameters; extern void PrintDeviceGrabInfo(DeviceIntPtr dev); extern void UngrabAllDevices(Bool kill_client); -extern GrabPtr AllocGrab(void); +extern GrabPtr AllocGrab(const GrabPtr src); extern void FreeGrab(GrabPtr grab); extern Bool CopyGrab(GrabPtr dst, const GrabPtr src); |