From a15abf82ddb5a209dbc30c4d12e1dc23c4adf3e4 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 8 Dec 2011 15:38:44 +1000 Subject: [PATCH] dix: always allocate and set the grab's sync.event Allocate the memory at device creation time and always store the event, even if we're not frozen. This way we know which event triggered the grab. Since the event was never freed anyway except on device shutdown, this doesn't really change things much. Signed-off-by: Peter Hutterer Reviewed-by: Chase Douglas --- dix/devices.c | 1 + dix/events.c | 8 +------- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/dix/devices.c b/dix/devices.c index e448eab62..9ca8fe055 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -275,6 +275,7 @@ AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart) dev->deviceGrab.ActivateGrab = ActivateKeyboardGrab; dev->deviceGrab.DeactivateGrab = DeactivateKeyboardGrab; dev->deviceGrab.activeGrab = AllocGrab(); + dev->deviceGrab.sync.event = calloc(1, sizeof(DeviceEvent)); XkbSetExtension(dev, ProcessKeyboardEvent); diff --git a/dix/events.c b/dix/events.c index db86f5167..086f438fd 100644 --- a/dix/events.c +++ b/dix/events.c @@ -3717,12 +3717,8 @@ ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event) } if (grabinfo->sync.state == FROZEN_NO_EVENT) - { - if (!grabinfo->sync.event) - grabinfo->sync.event = calloc(1, sizeof(DeviceEvent)); - *grabinfo->sync.event = event->device_event; grabinfo->sync.state = FROZEN_WITH_EVENT; - } + *grabinfo->sync.event = event->device_event; free(xE); return TRUE; @@ -4310,8 +4306,6 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr thisDev, case FREEZE_NEXT_EVENT: grabinfo->sync.state = FROZEN_WITH_EVENT; FreezeThaw(thisDev, TRUE); - if (!grabinfo->sync.event) - grabinfo->sync.event = calloc(1, sizeof(InternalEvent)); *grabinfo->sync.event = event->device_event; break; }