diff options
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | include/X11/extensions/Xfixes.h | 15 | ||||
-rw-r--r-- | src/Cursor.c | 60 |
3 files changed, 76 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac index cf9a8d4..fc8c1e1 100644 --- a/configure.ac +++ b/configure.ac @@ -32,7 +32,7 @@ AC_PREREQ([2.60]) # that 'revision' number appears in Xfixes.h and has to be manually # synchronized. # -AC_INIT(libXfixes, [4.0.5], +AC_INIT(libXfixes, [5.0], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [libXfixes]) AC_CONFIG_SRCDIR([Makefile.am]) AC_CONFIG_HEADERS([config.h]) diff --git a/include/X11/extensions/Xfixes.h b/include/X11/extensions/Xfixes.h index 0c00310..10a7e2e 100644 --- a/include/X11/extensions/Xfixes.h +++ b/include/X11/extensions/Xfixes.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 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"), @@ -249,6 +250,20 @@ XFixesShowCursor (Display *dpy, Window win); #endif /* XFIXES_MAJOR >= 4 */ +#if XFIXES_MAJOR >= 5 + +typedef XID PointerBarrier; + +PointerBarrier +XFixesCreatePointerBarrier(Display *dpy, Window w, int x1, int y1, + int x2, int y2, int directions, + int num_devices, int *devices); + +void +XFixesDestroyPointerBarrier(Display *dpy, PointerBarrier b); + +#endif /* XFIXES_MAJOR >= 5 */ + _XFUNCPROTOEND #endif /* _XFIXES_H_ */ diff --git a/src/Cursor.c b/src/Cursor.c index edd179d..0d656f7 100644 --- a/src/Cursor.c +++ b/src/Cursor.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 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"), @@ -274,3 +275,62 @@ XFixesShowCursor (Display *dpy, Window win) UnlockDisplay (dpy); SyncHandle (); } + +PointerBarrier +XFixesCreatePointerBarrier(Display *dpy, Window w, int x1, int y1, + int x2, int y2, int directions, + int num_devices, int *devices) +{ + XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy); + xXFixesCreatePointerBarrierReq *req; + PointerBarrier barrier; + int extra = 0; + + XFixesCheckExtension (dpy, info, 0); + if (info->major_version < 5) + return 0; + + if (num_devices) + extra = (((2 * num_devices) + 3) / 4) * 4; + + LockDisplay (dpy); + GetReqExtra (XFixesCreatePointerBarrier, extra, req); + req->reqType = info->codes->major_opcode; + req->xfixesReqType = X_XFixesCreatePointerBarrier; + barrier = req->barrier = XAllocID (dpy); + req->window = w; + req->x1 = x1; + req->y1 = y1; + req->x2 = x2; + req->y2 = y2; + req->directions = directions; + if ((req->num_devices = num_devices)) { + int i; + CARD16 *devs = (CARD16 *)(req + 1); + for (i = 0; i < num_devices; i++) + devs[i] = (CARD16)(devices[i]); + } + + UnlockDisplay (dpy); + SyncHandle(); + return barrier; +} + +void +XFixesDestroyPointerBarrier(Display *dpy, PointerBarrier b) +{ + XFixesExtDisplayInfo *info = XFixesFindDisplay (dpy); + xXFixesDestroyPointerBarrierReq *req; + + XFixesSimpleCheckExtension (dpy, info); + if (info->major_version < 5) + return; + + LockDisplay (dpy); + GetReq (XFixesDestroyPointerBarrier, req); + req->reqType = info->codes->major_opcode; + req->xfixesReqType = X_XFixesDestroyPointerBarrier; + req->barrier = b; + UnlockDisplay (dpy); + SyncHandle(); +} |