From 6ed435e44765f83287dfe14129ba1d74bfcb9fde Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Mon, 28 Oct 2019 17:45:49 +0100 Subject: NXevents.c: use XYToWindow from dix add a callback to determine the starting window. --- nx-X11/programs/Xserver/dix/events.c | 15 +++++-- nx-X11/programs/Xserver/hw/nxagent/NXevents.c | 58 ++++----------------------- 2 files changed, 20 insertions(+), 53 deletions(-) diff --git a/nx-X11/programs/Xserver/dix/events.c b/nx-X11/programs/Xserver/dix/events.c index c99e55a87..b29688857 100644 --- a/nx-X11/programs/Xserver/dix/events.c +++ b/nx-X11/programs/Xserver/dix/events.c @@ -1914,7 +1914,17 @@ PointInBorderSize(WindowPtr pWin, int x, int y) return FALSE; } -#ifndef NXAGENT_SERVER +/* define XYWINDOWCALLBACK if your DDX provides this callback */ + +static WindowPtr GetXYStartWindow(WindowPtr pWin); + +#ifndef XYWINDOWCALLBACK +static WindowPtr GetXYStartWindow(WindowPtr pWin) +{ + return pWin; +} +#endif + static WindowPtr XYToWindow(int x, int y) { @@ -1922,7 +1932,7 @@ XYToWindow(int x, int y) BoxRec box; spriteTraceGood = 1; /* root window still there */ - pWin = ROOT->firstChild; + pWin = GetXYStartWindow(ROOT->firstChild); while (pWin) { if ((pWin->mapped) && @@ -1960,7 +1970,6 @@ XYToWindow(int x, int y) } return spriteTrace[spriteTraceGood-1]; } -#endif /* NXAGENT_SERVER */ #ifndef NXAGENT_SERVER static Bool diff --git a/nx-X11/programs/Xserver/hw/nxagent/NXevents.c b/nx-X11/programs/Xserver/hw/nxagent/NXevents.c index 606b5e3b8..6754991c9 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/NXevents.c +++ b/nx-X11/programs/Xserver/hw/nxagent/NXevents.c @@ -135,6 +135,7 @@ of the copyright holder. #include +#define XYWINDOWCALLBACK #include "../../dix/events.c" #include "compext/Compext.h" @@ -251,15 +252,14 @@ ProcAllowEvents(register ClientPtr client) return Success; } +/* + * called from XYToWindow to determine where XYToWindow() should start + * going through the list. + */ + static WindowPtr -XYToWindow(int x, int y) +GetXYStartWindow(WindowPtr pWin) { - register WindowPtr pWin; - BoxRec box; - - spriteTraceGood = 1; /* root window still there */ - -#ifdef NXAGENT_SERVER if (nxagentOption(Rootless)) { if (nxagentLastEnteredWindow == NULL) @@ -274,49 +274,7 @@ XYToWindow(int x, int y) pWin = pWin->prevSib; } } - else - { - pWin = ROOT->firstChild; - } -#else - pWin = ROOT->firstChild; -#endif - while (pWin) - { - if ((pWin->mapped) && - (x >= pWin->drawable.x - wBorderWidth (pWin)) && - (x < pWin->drawable.x + (int)pWin->drawable.width + - wBorderWidth(pWin)) && - (y >= pWin->drawable.y - wBorderWidth (pWin)) && - (y < pWin->drawable.y + (int)pWin->drawable.height + - wBorderWidth (pWin)) -#ifdef SHAPE - /* When a window is shaped, a further check - * is made to see if the point is inside - * borderSize - */ - && (!wBoundingShape(pWin) || PointInBorderSize(pWin, x, y)) - && (!wInputShape(pWin) || - RegionContainsPoint( - wInputShape(pWin), - x - pWin->drawable.x, - y - pWin->drawable.y, &box)) -#endif - ) - { - if (spriteTraceGood >= spriteTraceSize) - { - spriteTraceSize += 10; - spriteTrace = realloc( - spriteTrace, spriteTraceSize*sizeof(WindowPtr)); - } - spriteTrace[spriteTraceGood++] = pWin; - pWin = pWin->firstChild; - } - else - pWin = pWin->nextSib; - } - return spriteTrace[spriteTraceGood-1]; + return pWin; } static Bool -- cgit v1.2.3