xi: Implement grab support for new gesture event types
This commit is contained in:
parent
b544a1fdb8
commit
080bac39c8
|
@ -2427,8 +2427,8 @@ GrabWindow(ClientPtr client, DeviceIntPtr dev, int type,
|
|||
|
||||
/* Touch grab */
|
||||
int
|
||||
GrabTouch(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr mod_dev,
|
||||
GrabParameters *param, GrabMask *mask)
|
||||
GrabTouchOrGesture(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr mod_dev,
|
||||
int type, GrabParameters *param, GrabMask *mask)
|
||||
{
|
||||
WindowPtr pWin;
|
||||
GrabPtr grab;
|
||||
|
@ -2446,7 +2446,7 @@ GrabTouch(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr mod_dev,
|
|||
return rc;
|
||||
|
||||
grab = CreateGrab(client->index, dev, mod_dev, pWin, XI2,
|
||||
mask, param, XI_TouchBegin, 0, NullWindow, NullCursor);
|
||||
mask, param, type, 0, NullWindow, NullCursor);
|
||||
if (!grab)
|
||||
return BadAlloc;
|
||||
|
||||
|
|
|
@ -114,14 +114,18 @@ ProcXIPassiveGrabDevice(ClientPtr client)
|
|||
stuff->grab_type != XIGrabtypeKeycode &&
|
||||
stuff->grab_type != XIGrabtypeEnter &&
|
||||
stuff->grab_type != XIGrabtypeFocusIn &&
|
||||
stuff->grab_type != XIGrabtypeTouchBegin) {
|
||||
stuff->grab_type != XIGrabtypeTouchBegin &&
|
||||
stuff->grab_type != XIGrabtypeGesturePinchBegin &&
|
||||
stuff->grab_type != XIGrabtypeGestureSwipeBegin) {
|
||||
client->errorValue = stuff->grab_type;
|
||||
return BadValue;
|
||||
}
|
||||
|
||||
if ((stuff->grab_type == XIGrabtypeEnter ||
|
||||
stuff->grab_type == XIGrabtypeFocusIn ||
|
||||
stuff->grab_type == XIGrabtypeTouchBegin) && stuff->detail != 0) {
|
||||
stuff->grab_type == XIGrabtypeTouchBegin ||
|
||||
stuff->grab_type == XIGrabtypeGesturePinchBegin ||
|
||||
stuff->grab_type == XIGrabtypeGestureSwipeBegin) && stuff->detail != 0) {
|
||||
client->errorValue = stuff->detail;
|
||||
return BadValue;
|
||||
}
|
||||
|
@ -217,7 +221,16 @@ ProcXIPassiveGrabDevice(ClientPtr client)
|
|||
status = GrabWindow(client, dev, stuff->grab_type, ¶m, &mask);
|
||||
break;
|
||||
case XIGrabtypeTouchBegin:
|
||||
status = GrabTouch(client, dev, mod_dev, ¶m, &mask);
|
||||
status = GrabTouchOrGesture(client, dev, mod_dev, XI_TouchBegin,
|
||||
¶m, &mask);
|
||||
break;
|
||||
case XIGrabtypeGesturePinchBegin:
|
||||
status = GrabTouchOrGesture(client, dev, mod_dev,
|
||||
XI_GesturePinchBegin, ¶m, &mask);
|
||||
break;
|
||||
case XIGrabtypeGestureSwipeBegin:
|
||||
status = GrabTouchOrGesture(client, dev, mod_dev,
|
||||
XI_GestureSwipeBegin, ¶m, &mask);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -307,7 +320,9 @@ ProcXIPassiveUngrabDevice(ClientPtr client)
|
|||
stuff->grab_type != XIGrabtypeKeycode &&
|
||||
stuff->grab_type != XIGrabtypeEnter &&
|
||||
stuff->grab_type != XIGrabtypeFocusIn &&
|
||||
stuff->grab_type != XIGrabtypeTouchBegin) {
|
||||
stuff->grab_type != XIGrabtypeTouchBegin &&
|
||||
stuff->grab_type != XIGrabtypeGesturePinchBegin &&
|
||||
stuff->grab_type != XIGrabtypeGestureSwipeBegin) {
|
||||
client->errorValue = stuff->grab_type;
|
||||
return BadValue;
|
||||
}
|
||||
|
@ -348,6 +363,12 @@ ProcXIPassiveUngrabDevice(ClientPtr client)
|
|||
case XIGrabtypeTouchBegin:
|
||||
tempGrab->type = XI_TouchBegin;
|
||||
break;
|
||||
case XIGrabtypeGesturePinchBegin:
|
||||
tempGrab->type = XI_GesturePinchBegin;
|
||||
break;
|
||||
case XIGrabtypeGestureSwipeBegin:
|
||||
tempGrab->type = XI_GestureSwipeBegin;
|
||||
break;
|
||||
}
|
||||
tempGrab->grabtype = XI2;
|
||||
tempGrab->modifierDevice = mod_dev;
|
||||
|
|
|
@ -716,3 +716,10 @@ GrabIsKeyboardGrab(GrabPtr grab)
|
|||
return (grab->type == KeyPress ||
|
||||
grab->type == DeviceKeyPress || grab->type == XI_KeyPress);
|
||||
}
|
||||
|
||||
Bool
|
||||
GrabIsGestureGrab(GrabPtr grab)
|
||||
{
|
||||
return (grab->type == XI_GesturePinchBegin ||
|
||||
grab->type == XI_GestureSwipeBegin);
|
||||
}
|
||||
|
|
|
@ -61,4 +61,5 @@ extern _X_EXPORT Bool DeletePassiveGrabFromList(GrabPtr /* pMinuendGrab */ );
|
|||
|
||||
extern Bool GrabIsPointerGrab(GrabPtr grab);
|
||||
extern Bool GrabIsKeyboardGrab(GrabPtr grab);
|
||||
extern Bool GrabIsGestureGrab(GrabPtr grab);
|
||||
#endif /* DIXGRABS_H */
|
||||
|
|
|
@ -192,11 +192,12 @@ extern int
|
|||
GrabMask * /* eventMask */ );
|
||||
|
||||
extern int
|
||||
GrabTouch(ClientPtr /* client */ ,
|
||||
DeviceIntPtr /* dev */ ,
|
||||
DeviceIntPtr /* mod_dev */ ,
|
||||
GrabParameters * /* param */ ,
|
||||
GrabMask * /* eventMask */ );
|
||||
GrabTouchOrGesture(ClientPtr /* client */ ,
|
||||
DeviceIntPtr /* dev */ ,
|
||||
DeviceIntPtr /* mod_dev */ ,
|
||||
int /* type */ ,
|
||||
GrabParameters * /* param */ ,
|
||||
GrabMask * /* eventMask */ );
|
||||
|
||||
extern int
|
||||
SelectForWindow(DeviceIntPtr /* dev */ ,
|
||||
|
|
Loading…
Reference in New Issue