From acd819ac07bf66165f5d44af4a224f68c31bc30d Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sat, 10 Oct 2020 02:51:31 +0300 Subject: [PATCH] dix: Extract FixUpXI2DeviceEventFromWindow() --- dix/events.c | 58 ++++++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/dix/events.c b/dix/events.c index 9431e4f12..c1f847ad8 100644 --- a/dix/events.c +++ b/dix/events.c @@ -2502,6 +2502,35 @@ FindChildForEvent(SpritePtr pSprite, WindowPtr event) return child; } +static void +FixUpXI2DeviceEventFromWindow(SpritePtr pSprite, int evtype, + xXIDeviceEvent *event, WindowPtr pWin, Window child) +{ + event->root = RootWindow(pSprite)->drawable.id; + event->event = pWin->drawable.id; + + if (evtype == XI_TouchOwnership) { + event->child = child; + return; + } + + 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; + } + + if (event->evtype == XI_Enter || event->evtype == XI_Leave || + event->evtype == XI_FocusIn || event->evtype == XI_FocusOut) + ((xXIEnterEvent *) event)->same_screen = + (pSprite->hot.pScreen == pWin->drawable.pScreen); +} + /** * Adjust event fields to comply with the window properties. * @@ -2520,8 +2549,6 @@ FixUpEventFromWindow(SpritePtr pSprite, child = FindChildForEvent(pSprite, pWin); if ((evtype = xi2_get_type(xE))) { - xXIDeviceEvent *event = (xXIDeviceEvent *) xE; - switch (evtype) { case XI_RawKeyPress: case XI_RawKeyRelease: @@ -2538,33 +2565,10 @@ FixUpEventFromWindow(SpritePtr pSprite, case XI_BarrierLeave: return; default: + FixUpXI2DeviceEventFromWindow(pSprite, evtype, + (xXIDeviceEvent*) xE, pWin, child); break; } - - event->root = RootWindow(pSprite)->drawable.id; - event->event = pWin->drawable.id; - - if (evtype == XI_TouchOwnership) { - event->child = child; - return; - } - - 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; - } - - if (event->evtype == XI_Enter || event->evtype == XI_Leave || - event->evtype == XI_FocusIn || event->evtype == XI_FocusOut) - ((xXIEnterEvent *) event)->same_screen = - (pSprite->hot.pScreen == pWin->drawable.pScreen); - } else { XE_KBPTR.root = RootWindow(pSprite)->drawable.id;