summaryrefslogtreecommitdiff
path: root/dix/events.c
diff options
context:
space:
mode:
authorPovilas Kanapickas <povilas@radix.lt>2021-05-30 13:26:38 +0300
committerPovilas Kanapickas <povilas@radix.lt>2021-05-30 13:26:38 +0300
commit0bf4123fd3bc945d150884e6ea38bd2b81c0994b (patch)
tree6a883a81009f138d1226dbbb01d1801ca5c2547b /dix/events.c
parent227f601de31aabf6aaa897477e42e6b7f8f7c963 (diff)
dix: Implement gesture event fixups before delivery
Diffstat (limited to 'dix/events.c')
-rw-r--r--dix/events.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/dix/events.c b/dix/events.c
index 20a40ecb2..e2455a4bb 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -2545,6 +2545,44 @@ FixUpXI2DeviceEventFromWindow(SpritePtr pSprite, int evtype,
(pSprite->hot.pScreen == pWin->drawable.pScreen);
}
+static void
+FixUpXI2PinchEventFromWindow(SpritePtr pSprite, xXIGesturePinchEvent *event,
+ WindowPtr pWin, Window child)
+{
+ event->root = RootWindow(pSprite)->drawable.id;
+ event->event = pWin->drawable.id;
+
+ if (pSprite->hot.pScreen == pWin->drawable.pScreen) {
+ event->event_x = event->root_x - double_to_fp1616(pWin->drawable.x);
+ event->event_y = event->root_y - double_to_fp1616(pWin->drawable.y);
+ event->child = child;
+ }
+ else {
+ event->event_x = 0;
+ event->event_y = 0;
+ event->child = None;
+ }
+}
+
+static void
+FixUpXI2SwipeEventFromWindow(SpritePtr pSprite, xXIGestureSwipeEvent *event,
+ WindowPtr pWin, Window child)
+{
+ event->root = RootWindow(pSprite)->drawable.id;
+ event->event = pWin->drawable.id;
+
+ if (pSprite->hot.pScreen == pWin->drawable.pScreen) {
+ event->event_x = event->root_x - double_to_fp1616(pWin->drawable.x);
+ event->event_y = event->root_y - double_to_fp1616(pWin->drawable.y);
+ event->child = child;
+ }
+ else {
+ event->event_x = 0;
+ event->event_y = 0;
+ event->child = None;
+ }
+}
+
/**
* Adjust event fields to comply with the window properties.
*
@@ -2578,6 +2616,18 @@ FixUpEventFromWindow(SpritePtr pSprite,
case XI_BarrierHit:
case XI_BarrierLeave:
return;
+ case XI_GesturePinchBegin:
+ case XI_GesturePinchUpdate:
+ case XI_GesturePinchEnd:
+ FixUpXI2PinchEventFromWindow(pSprite,
+ (xXIGesturePinchEvent*) xE, pWin, child);
+ break;
+ case XI_GestureSwipeBegin:
+ case XI_GestureSwipeUpdate:
+ case XI_GestureSwipeEnd:
+ FixUpXI2SwipeEventFromWindow(pSprite,
+ (xXIGestureSwipeEvent*) xE, pWin, child);
+ break;
default:
FixUpXI2DeviceEventFromWindow(pSprite, evtype,
(xXIDeviceEvent*) xE, pWin, child);