[PATCH] Added WithConfine functions.

Philipp Reh sefi at s-e-f-i.de
Thu May 5 07:25:46 PDT 2011


---
 include/X11/extensions/XInput2.h |   43 +++++++++++++++++++++++++++++++
 src/XIGrabDevice.c               |   18 +++++++++++--
 src/XIPassiveGrab.c              |   52 +++++++++++++++++++++++++++++--------
 3 files changed, 98 insertions(+), 15 deletions(-)

diff --git a/include/X11/extensions/XInput2.h b/include/X11/extensions/XInput2.h
index 3fcf083..f297801 100644
--- a/include/X11/extensions/XInput2.h
+++ b/include/X11/extensions/XInput2.h
@@ -402,6 +402,19 @@ extern Status XIGrabDevice(
      XIEventMask        *mask
 );
 
+extern Status XIGrabDeviceWithConfine(
+     Display*           dpy,
+     int                deviceid,
+     Window             grab_window,
+     Window             confine_to,
+     Time               time,
+     Cursor             cursor,
+     int                grab_mode,
+     int                paired_device_mode,
+     Bool               owner_events,
+     XIEventMask        *mask
+);
+
 extern Status XIUngrabDevice(
      Display*           dpy,
      int                deviceid,
@@ -429,6 +442,21 @@ extern int XIGrabButton(
     XIGrabModifiers     *modifiers_inout
 );
 
+extern int XIGrabButtonWithConfine(
+    Display*            display,
+    int                 deviceid,
+    int                 button,
+    Window              grab_window,
+    Window              confine_to,
+    Cursor              cursor,
+    int                 grab_mode,
+    int                 paired_device_mode,
+    int                 owner_events,
+    XIEventMask         *mask,
+    int                 num_modifiers,
+    XIGrabModifiers     *modifiers_inout
+);
+
 extern int XIGrabKeycode(
     Display*            display,
     int                 deviceid,
@@ -455,6 +483,20 @@ extern int XIGrabEnter(
     XIGrabModifiers     *modifiers_inout
 );
 
+extern int XIGrabEnterWithConfine(
+    Display*            display,
+    int                 deviceid,
+    Window              grab_window,
+    Window              confine_to,
+    Cursor              cursor,
+    int                 grab_mode,
+    int                 paired_device_mode,
+    int                 owner_events,
+    XIEventMask         *mask,
+    int                 num_modifiers,
+    XIGrabModifiers     *modifiers_inout
+);
+
 extern int XIGrabFocusIn(
     Display*            display,
     int                 deviceid,
@@ -466,6 +508,7 @@ extern int XIGrabFocusIn(
     int                 num_modifiers,
     XIGrabModifiers     *modifiers_inout
 );
+
 extern Status XIUngrabButton(
     Display*            display,
     int                 deviceid,
diff --git a/src/XIGrabDevice.c b/src/XIGrabDevice.c
index 94feaee..e989ee0 100644
--- a/src/XIGrabDevice.c
+++ b/src/XIGrabDevice.c
@@ -35,7 +35,18 @@ XIGrabDevice(Display* dpy, int deviceid, Window grab_window, Time time,
              Cursor cursor, int grab_mode, int paired_device_mode,
              Bool owner_events, XIEventMask *mask)
 {
-    xXIGrabDeviceReq *req;
+    return XIGrabDeviceWithConfine(dpy, deviceid, grab_window, None, time,
+                                   cursor, grab_mode, paired_device_mode,
+                                   owner_events, mask);
+}
+
+Status
+XIGrabDeviceWithConfine(Display* dpy, int deviceid, Window grab_window,
+                        Window confine_to, Time time, Cursor cursor,
+                        int grab_mode, int paired_device_mode,
+                        Bool owner_events, XIEventMask *mask)
+{
+    xXIGrabDeviceWithConfineReq *req;
     xXIGrabDeviceReply reply;
     char* buff;
     int len;
@@ -46,11 +57,12 @@ XIGrabDevice(Display* dpy, int deviceid, Window grab_window, Time time,
     if (_XiCheckExtInit(dpy, XInput_2_0, extinfo) == -1)
 	return (NoSuchExtension);
 
-    GetReq(XIGrabDevice, req);
+    GetReq(XIGrabDeviceWithConfine, req);
     req->reqType  = extinfo->codes->major_opcode;
-    req->ReqType  = X_XIGrabDevice;
+    req->ReqType  = X_XIGrabDeviceWithConfine;
     req->deviceid = deviceid;
     req->grab_window = grab_window;
+    req->confine_to = confine_to;
     req->time = time;
     req->grab_mode = grab_mode;
     req->paired_device_mode = paired_device_mode;
diff --git a/src/XIPassiveGrab.c b/src/XIPassiveGrab.c
index feef74b..3e10356 100644
--- a/src/XIPassiveGrab.c
+++ b/src/XIPassiveGrab.c
@@ -31,12 +31,12 @@
 
 static int
 _XIPassiveGrabDevice(Display* dpy, int deviceid, int grabtype, int detail,
-                     Window grab_window, Cursor cursor,
+                     Window grab_window, Window confine_to, Cursor cursor,
                      int grab_mode, int paired_device_mode,
                      Bool owner_events, XIEventMask *mask,
                      int num_modifiers, XIGrabModifiers *modifiers_inout)
 {
-    xXIPassiveGrabDeviceReq *req;
+    xXIPassiveGrabDeviceWithConfineReq *req;
     xXIPassiveGrabDeviceReply reply;
     xXIGrabModifierInfo *failed_mods;
     int len = 0, i;
@@ -48,14 +48,15 @@ _XIPassiveGrabDevice(Display* dpy, int deviceid, int grabtype, int detail,
     if (_XiCheckExtInit(dpy, XInput_2_0, extinfo) == -1)
 	return -1;
 
-    GetReq(XIPassiveGrabDevice, req);
+    GetReq(XIPassiveGrabDeviceWithConfine, req);
     req->reqType = extinfo->codes->major_opcode;
-    req->ReqType = X_XIPassiveGrabDevice;
+    req->ReqType = X_XIPassiveGrabDeviceWithConfine;
     req->deviceid = deviceid;
     req->grab_mode = grab_mode;
     req->paired_device_mode = paired_device_mode;
     req->owner_events = owner_events;
     req->grab_window = grab_window;
+    req->confine_to = confine_to;
     req->cursor = cursor;
     req->detail = detail;
     req->num_modifiers = num_modifiers;
@@ -105,19 +106,33 @@ XIGrabButton(Display* dpy, int deviceid, int button,
              int num_modifiers, XIGrabModifiers *modifiers_inout)
 {
     return _XIPassiveGrabDevice(dpy, deviceid, XIGrabtypeButton, button,
-                                grab_window, cursor, grab_mode,
+                                grab_window, None, cursor, grab_mode,
                                 paired_device_mode, owner_events, mask,
                                 num_modifiers, modifiers_inout);
 }
 
 int
+XIGrabButtonWithConfine(Display* dpy, int deviceid, int button,
+                        Window grab_window, Window confine_to, Cursor cursor,
+                        int grab_mode, int paired_device_mode,
+                        Bool owner_events, XIEventMask *mask,
+                        int num_modifiers, XIGrabModifiers *modifiers_inout)
+{
+    return _XIPassiveGrabDevice(dpy, deviceid, XIGrabtypeButton, button,
+                                grab_window, confine_to, cursor, grab_mode,
+                                paired_device_mode, owner_events, mask,
+                                num_modifiers, modifiers_inout);
+}
+
+
+int
 XIGrabKeycode(Display* dpy, int deviceid, int keycode,
              Window grab_window, int grab_mode, int paired_device_mode,
              Bool owner_events, XIEventMask *mask,
              int num_modifiers, XIGrabModifiers *modifiers_inout)
 {
     return _XIPassiveGrabDevice(dpy, deviceid, XIGrabtypeKeycode, keycode,
-                                grab_window, None, grab_mode, paired_device_mode,
+                                grab_window, None, None, grab_mode, paired_device_mode,
                                 owner_events, mask, num_modifiers,
                                 modifiers_inout);
 }
@@ -129,9 +144,22 @@ XIGrabEnter(Display *dpy, int deviceid, Window grab_window, Cursor cursor,
             XIGrabModifiers *modifiers_inout)
 {
     return _XIPassiveGrabDevice(dpy, deviceid, XIGrabtypeEnter, 0,
-                                grab_window, cursor, grab_mode, paired_device_mode,
-                                owner_events, mask, num_modifiers,
-                                modifiers_inout);
+                                grab_window, None, cursor, grab_mode,
+                                paired_device_mode, owner_events, mask,
+                                num_modifiers, modifiers_inout);
+}
+
+int
+XIGrabEnterWithConfine(Display *dpy, int deviceid, Window grab_window,
+                       Window confine_to, Cursor cursor,
+                       int grab_mode, int paired_device_mode, Bool owner_events,
+                       XIEventMask *mask, int num_modifiers,
+                       XIGrabModifiers *modifiers_inout)
+{
+    return _XIPassiveGrabDevice(dpy, deviceid, XIGrabtypeEnter, 0,
+                                grab_window, confine_to, cursor, grab_mode,
+                                paired_device_mode, owner_events, mask,
+                                num_modifiers, modifiers_inout);
 }
 
 int
@@ -140,9 +168,9 @@ XIGrabFocusIn(Display *dpy, int deviceid, Window grab_window, int grab_mode,
             int num_modifiers, XIGrabModifiers *modifiers_inout)
 {
     return _XIPassiveGrabDevice(dpy, deviceid, XIGrabtypeFocusIn, 0,
-                                grab_window, None, grab_mode, paired_device_mode,
-                                owner_events, mask, num_modifiers,
-                                modifiers_inout);
+                                grab_window, None, None, grab_mode,
+                                paired_device_mode, owner_events, mask,
+                                num_modifiers, modifiers_inout);
 }
 
 static int
-- 
1.7.5.rc3



More information about the xorg-devel mailing list