diff options
author | Povilas Kanapickas <povilas@radix.lt> | 2021-05-30 13:26:38 +0300 |
---|---|---|
committer | Povilas Kanapickas <povilas@radix.lt> | 2021-05-30 13:26:38 +0300 |
commit | 0bf4123fd3bc945d150884e6ea38bd2b81c0994b (patch) | |
tree | 6a883a81009f138d1226dbbb01d1801ca5c2547b /dix/events.c | |
parent | 227f601de31aabf6aaa897477e42e6b7f8f7c963 (diff) |
dix: Implement gesture event fixups before delivery
Diffstat (limited to 'dix/events.c')
-rw-r--r-- | dix/events.c | 50 |
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); |