aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nx-X11/programs/Xserver/dix/events.c15
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/NXevents.c58
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 <nx-X11/Xlib.h>
+#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