diff options
author | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-05-14 18:09:38 +0930 |
---|---|---|
committer | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-05-14 18:09:38 +0930 |
commit | 12e3d8b1db94feecf27ed98c8ac523f755c59e45 (patch) | |
tree | 8ede76f208e87ebdeeab3634b1e0d50e99bc75ba /src | |
parent | f8215ada9c1f3e8f001c77362005168492e35cf4 (diff) |
Add XExtendedGrabDevice and XExtendedUngrabDevice.
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/XExtGrabDev.c | 94 | ||||
-rw-r--r-- | src/XExtUngrDev.c | 64 |
3 files changed, 160 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 1f9f0ec..739d810 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -17,7 +17,9 @@ libXi_la_SOURCES = \ XDefDevCur.c \ XDenyDev.c \ XDevBell.c \ + XExtGrabDev.c \ XExtToWire.c \ + XExtUngrDev.c \ XFakeDevData.c \ XGetBMap.c \ XGetCPtr.c \ diff --git a/src/XExtGrabDev.c b/src/XExtGrabDev.c new file mode 100644 index 0000000..50d35e6 --- /dev/null +++ b/src/XExtGrabDev.c @@ -0,0 +1,94 @@ +/************************************************************ + +Copyright 2007 Peter Hutterer <peter@cs.unisa.edu.au> + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice 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 +AUTHOR 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. + +Except as contained in this notice, the name of the author shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the author. + +*/ + +/*********************************************************************** + * + * XExtendedGrabDevice - grab an input device. + * + */ + +#include <X11/extensions/XI.h> +#include <X11/extensions/XIproto.h> +#include <X11/Xlibint.h> +#include <X11/extensions/XInput.h> +#include <X11/extensions/extutil.h> +#include "XIint.h" + +int +XExtendedGrabDevice(Display* dpy, + XDevice* dev, + Window grab_window, + int device_mode, + Bool ownerEvents, + Window confineTo, + Cursor cursor, + int event_count, + XEventClass* event_list, + int generic_event_count, + XGenericEventMask* generic_events) +{ + xExtendedGrabDeviceReply rep; + xExtendedGrabDeviceReq *req; + + XExtDisplayInfo *info = XInput_find_display(dpy); + + LockDisplay(dpy); + if (_XiCheckExtInit(dpy, XInput_Initial_Release, info) == -1) + return (NoSuchExtension); + + GetReq(ExtendedGrabDevice, req); + req->reqType = info->codes->major_opcode; + req->ReqType = X_ExtendedGrabDevice; + req->deviceid = dev->device_id; + req->grab_window = grab_window; + req->ungrab = False; + req->device_mode = device_mode; + req->owner_events = ownerEvents; + req->confine_to = confineTo; + req->cursor = cursor; + req->event_count = event_count; + req->generic_event_count = generic_event_count; + req->time = CurrentTime; + + if (event_count) + { + req->length += event_count; + event_count <<= 2; + Data32(dpy, (long *)event_list, event_count); + } + + if (generic_event_count) + { + req->length += (generic_event_count * sizeof(XGenericEventMask)) >> 2; + Data(dpy, (char *)generic_events, generic_event_count * sizeof(XGenericEventMask)); + } + + if (_XReply(dpy, (xReply *) & rep, 0, xTrue) == 0) + rep.status = GrabSuccess; + UnlockDisplay(dpy); + SyncHandle(); + return (rep.status); +} diff --git a/src/XExtUngrDev.c b/src/XExtUngrDev.c new file mode 100644 index 0000000..00b30df --- /dev/null +++ b/src/XExtUngrDev.c @@ -0,0 +1,64 @@ +/************************************************************ + +Copyright 2007 Peter Hutterer <peter@cs.unisa.edu.au> + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice 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 +AUTHOR 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. + +Except as contained in this notice, the name of the author shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the author. + +*/ + +/*********************************************************************** + * + * XExtendedGrabDevice - grab an input device. + * + */ + +#include <X11/extensions/XI.h> +#include <X11/extensions/XIproto.h> +#include <X11/Xlibint.h> +#include <X11/extensions/XInput.h> +#include <X11/extensions/extutil.h> +#include "XIint.h" + +int +XExtendedUngrabDevice(Display* dpy, + XDevice* dev) +{ + xExtendedGrabDeviceReply rep; + xExtendedGrabDeviceReq *req; + XExtDisplayInfo *info = XInput_find_display(dpy); + + LockDisplay(dpy); + if (_XiCheckExtInit(dpy, XInput_Initial_Release, info) == -1) + return (NoSuchExtension); + + GetReq(ExtendedGrabDevice, req); + req->reqType = info->codes->major_opcode; + req->ReqType = X_ExtendedGrabDevice; + req->deviceid = dev->device_id; + req->ungrab = True; + + if (_XReply(dpy, (xReply *) & rep, 0, xTrue) == 0) + rep.status = GrabSuccess; + UnlockDisplay(dpy); + SyncHandle(); + return (rep.status); +} + |