diff options
author | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-04-03 15:06:26 +0930 |
---|---|---|
committer | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-04-03 15:06:26 +0930 |
commit | 9b0b3406682b5a3161e6c3895771523214c37207 (patch) | |
tree | 3db8e7d008ff769b7347673a1e643f839ef979a6 | |
parent | e8777a91f37d828b9df839bf3d9cf2f954bdddb0 (diff) |
Make GrabDevice differ between core grabs and device grabs.
-rw-r--r-- | Xi/grabdev.c | 2 | ||||
-rw-r--r-- | dix/events.c | 16 | ||||
-rw-r--r-- | include/dix.h | 3 |
3 files changed, 12 insertions, 9 deletions
diff --git a/Xi/grabdev.c b/Xi/grabdev.c index e2809efb1..143b98c73 100644 --- a/Xi/grabdev.c +++ b/Xi/grabdev.c @@ -141,7 +141,7 @@ ProcXGrabDevice(ClientPtr client) error = GrabDevice(client, dev, stuff->this_device_mode, stuff->other_devices_mode, stuff->grabWindow, stuff->ownerEvents, stuff->time, - tmp[stuff->deviceid].mask, &rep.status); + tmp[stuff->deviceid].mask, &rep.status, FALSE); if (error != Success) { SendErrorToClient(client, IReqCode, X_GrabDevice, 0, error); diff --git a/dix/events.c b/dix/events.c index de8ff9b6b..03d82e911 100644 --- a/dix/events.c +++ b/dix/events.c @@ -4110,12 +4110,14 @@ ProcUngrabPointer(ClientPtr client) int GrabDevice(ClientPtr client, DeviceIntPtr dev, unsigned this_mode, unsigned other_mode, Window grabWindow, - unsigned ownerEvents, Time ctime, Mask mask, CARD8 *status) + unsigned ownerEvents, Time ctime, Mask mask, CARD8 *status, + Bool coreGrab) { WindowPtr pWin; GrabPtr grab; TimeStamp time; int rc; + GrabInfoPtr grabInfo = (coreGrab) ? &dev->coreGrab : &dev->deviceGrab; UpdateCurrentTime(); if ((this_mode != GrabModeSync) && (this_mode != GrabModeAsync)) @@ -4137,16 +4139,16 @@ GrabDevice(ClientPtr client, DeviceIntPtr dev, if (rc != Success) return rc; time = ClientTimeToServerTime(ctime); - grab = dev->coreGrab.grab; + grab = grabInfo->grab; if (grab && !SameClient(grab, client)) *status = AlreadyGrabbed; else if (!pWin->realized) *status = GrabNotViewable; else if ((CompareTimeStamps(time, currentTime) == LATER) || - (CompareTimeStamps(time, dev->coreGrab.grabTime) == EARLIER)) + (CompareTimeStamps(time, grabInfo->grabTime) == EARLIER)) *status = GrabInvalidTime; - else if (dev->coreGrab.sync.frozen && - dev->coreGrab.sync.other && !SameClient(dev->coreGrab.sync.other, client)) + else if (grabInfo->sync.frozen && + grabInfo->sync.other && !SameClient(grabInfo->sync.other, client)) *status = GrabFrozen; else { @@ -4164,7 +4166,7 @@ GrabDevice(ClientPtr client, DeviceIntPtr dev, tempGrab.device = dev; tempGrab.cursor = NULL; - (*dev->coreGrab.ActivateGrab)(dev, &tempGrab, time, FALSE); + (*grabInfo->ActivateGrab)(dev, &tempGrab, time, FALSE); *status = GrabSuccess; } return Success; @@ -4184,7 +4186,7 @@ ProcGrabKeyboard(ClientPtr client) result = GrabDevice(client, keyboard, stuff->keyboardMode, stuff->pointerMode, stuff->grabWindow, stuff->ownerEvents, stuff->time, - KeyPressMask | KeyReleaseMask, &rep.status); + KeyPressMask | KeyReleaseMask, &rep.status, TRUE); else { result = Success; rep.status = AlreadyGrabbed; diff --git a/include/dix.h b/include/dix.h index 2ad6c77fa..1b112a1ca 100644 --- a/include/dix.h +++ b/include/dix.h @@ -485,7 +485,8 @@ extern int GrabDevice( unsigned /* ownerEvents */, Time /* ctime */, Mask /* mask */, - CARD8 * /* status */); + CARD8 * /* status */, + Bool /* coreGrab */); extern void InitEvents(void); extern void InitSprite( |