--- 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 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel