diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2009-04-15 22:17:15 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2009-04-19 22:28:11 +1000 |
commit | eeb1e4cd254c047539933c3b886037e67ef30762 (patch) | |
tree | dee00b65221250091a255adbc0a5fa812b16b68e | |
parent | 74d0fc3aee05bc4f505274d81dd44c0d2b4368ff (diff) |
Xi: add support for XIAllowEvents.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | Xi/Makefile.am | 2 | ||||
-rw-r--r-- | Xi/extinit.c | 7 | ||||
-rw-r--r-- | Xi/xiallowev.c | 100 | ||||
-rw-r--r-- | Xi/xiallowev.h | 32 |
4 files changed, 139 insertions, 2 deletions
diff --git a/Xi/Makefile.am b/Xi/Makefile.am index 32510f28f..1fa7b9aeb 100644 --- a/Xi/Makefile.am +++ b/Xi/Makefile.am @@ -92,6 +92,8 @@ libXi_la_SOURCES = \ ungrdevk.h \ warpdevp.c \ warpdevp.h \ + xiallowev.c \ + xiallowev.h \ xigrabdev.c \ xigrabdev.h \ xiproperty.c \ diff --git a/Xi/extinit.c b/Xi/extinit.c index 9d3b5e613..9628dffb8 100644 --- a/Xi/extinit.c +++ b/Xi/extinit.c @@ -119,6 +119,7 @@ SOFTWARE. #include "ungrdevb.h" #include "ungrdevk.h" #include "warpdevp.h" +#include "xiallowev.h" #include "xiselectev.h" #include "xigrabdev.h" #include "xisetdevfocus.h" @@ -245,7 +246,8 @@ static int (*ProcIVector[])(ClientPtr) = { ProcXISetDeviceFocus, /* 49 */ ProcXIGetDeviceFocus, /* 50 */ ProcXIGrabDevice, /* 51 */ - ProcXIUngrabDevice /* 52 */ + ProcXIUngrabDevice, /* 52 */ + ProcXIAllowEvents /* 53 */ }; /* For swapped clients */ @@ -302,7 +304,8 @@ static int (*SProcIVector[])(ClientPtr) = { SProcXISetDeviceFocus, /* 49 */ SProcXIGetDeviceFocus, /* 50 */ SProcXIGrabDevice, /* 51 */ - SProcXIUngrabDevice /* 52 */ + SProcXIUngrabDevice, /* 52 */ + SProcXIAllowEvents /* 53 */ }; /***************************************************************** diff --git a/Xi/xiallowev.c b/Xi/xiallowev.c new file mode 100644 index 000000000..571255759 --- /dev/null +++ b/Xi/xiallowev.c @@ -0,0 +1,100 @@ +/* + * Copyright © 2009 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Author: Peter Hutterer + */ + +/*********************************************************************** + * + * Request to allow some device events. + * + */ + +#ifdef HAVE_DIX_CONFIG_H +#include <dix-config.h> +#endif + +#include "inputstr.h" /* DeviceIntPtr */ +#include "windowstr.h" /* window structure */ +#include <X11/extensions/XI2.h> +#include <X11/extensions/XI2proto.h> + +#include "exglobals.h" /* BadDevice */ +#include "xiallowev.h" + +int +SProcXIAllowEvents(ClientPtr client) +{ + char n; + + REQUEST(xXIAllowEventsReq); + + swaps(&stuff->length, n); + swaps(&stuff->deviceid, n); + swapl(&stuff->time, n); + + return ProcXIAllowEvents(client); +} + +int +ProcXIAllowEvents(ClientPtr client) +{ + TimeStamp time; + DeviceIntPtr dev; + int ret = Success; + + REQUEST(xXIAllowEventsReq); + REQUEST_SIZE_MATCH(xXIAllowEventsReq); + + ret = dixLookupDevice(&dev, stuff->deviceid, client, DixSetFocusAccess); + if (ret != Success) + return ret; + + time = ClientTimeToServerTime(stuff->time); + + switch (stuff->mode) { + case ReplayThisDevice: + AllowSome(client, time, dev, NOT_GRABBED); + break; + case SyncThisDevice: + AllowSome(client, time, dev, FREEZE_NEXT_EVENT); + break; + case AsyncThisDevice: + AllowSome(client, time, dev, THAWED); + break; + case AsyncOtherDevices: + AllowSome(client, time, dev, THAW_OTHERS); + break; + case SyncAll: + AllowSome(client, time, dev, FREEZE_BOTH_NEXT_EVENT); + break; + case AsyncAll: + AllowSome(client, time, dev, THAWED_BOTH); + break; + default: + client->errorValue = stuff->mode; + ret = BadValue; + } + + return ret; +} + diff --git a/Xi/xiallowev.h b/Xi/xiallowev.h new file mode 100644 index 000000000..97a0f251e --- /dev/null +++ b/Xi/xiallowev.h @@ -0,0 +1,32 @@ +/* + * Copyright © 2009 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Author: Peter Hutterer + */ + +#ifndef XIALLOWEV_H +#define XIALLOWEV_H + +int ProcXIAllowEvents(ClientPtr client); +int SProcXIAllowEvents(ClientPtr client); + +#endif |