aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/Xserver/hw/nxagent
diff options
context:
space:
mode:
authorMike Gabriel <mike.gabriel@das-netzwerkteam.de>2019-06-11 12:00:48 +0200
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2019-06-11 12:00:48 +0200
commit92f41213edf57332124df8e0b50ca73ff1a11773 (patch)
tree9f7c067d73c4eb4044407d26df0416f29ae082fa /nx-X11/programs/Xserver/hw/nxagent
parent126cbe1ff20e19cd477c5fe9a127298bd12e3e2e (diff)
parenta736122f5712d5d1b3b798ace3583a101c0cdf61 (diff)
downloadnx-libs-92f41213edf57332124df8e0b50ca73ff1a11773.tar.gz
nx-libs-92f41213edf57332124df8e0b50ca73ff1a11773.tar.bz2
nx-libs-92f41213edf57332124df8e0b50ca73ff1a11773.zip
Merge branch 'uli42-pr/fix_broken_cursor_handling' into 3.6.x
Attributes GH PR #810: https://github.com/ArcticaProject/nx-libs/pull/810
Diffstat (limited to 'nx-X11/programs/Xserver/hw/nxagent')
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/NXevents.c141
1 files changed, 75 insertions, 66 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/NXevents.c b/nx-X11/programs/Xserver/hw/nxagent/NXevents.c
index 370fff6b5..43dfe8613 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/NXevents.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/NXevents.c
@@ -381,79 +381,88 @@ XYToWindow(int x, int y)
return spriteTrace[spriteTraceGood-1];
}
-// static Bool
-// CheckMotion(xEvent *xE)
-// {
-// WindowPtr prevSpriteWin = sprite.win;
-//
+static Bool
+CheckMotion(xEvent *xE)
+{
+ WindowPtr prevSpriteWin = sprite.win;
+
#ifdef PANORAMIX
-// if(!noPanoramiXExtension)
-// return XineramaCheckMotion(xE);
+ if(!noPanoramiXExtension)
+ return XineramaCheckMotion(xE);
#endif
-// if (xE && !syncEvents.playingEvents)
-// {
-// if (sprite.hot.pScreen != sprite.hotPhys.pScreen)
-// {
-// sprite.hot.pScreen = sprite.hotPhys.pScreen;
-// ROOT = sprite.hot.pScreen->root;
-// }
-// sprite.hot.x = XE_KBPTR.rootX;
-// sprite.hot.y = XE_KBPTR.rootY;
-// if (sprite.hot.x < sprite.physLimits.x1)
-// sprite.hot.x = sprite.physLimits.x1;
-// else if (sprite.hot.x >= sprite.physLimits.x2)
-// sprite.hot.x = sprite.physLimits.x2 - 1;
-// if (sprite.hot.y < sprite.physLimits.y1)
-// sprite.hot.y = sprite.physLimits.y1;
-// else if (sprite.hot.y >= sprite.physLimits.y2)
-// sprite.hot.y = sprite.physLimits.y2 - 1;
+ if (xE && !syncEvents.playingEvents)
+ {
+ if (sprite.hot.pScreen != sprite.hotPhys.pScreen)
+ {
+ sprite.hot.pScreen = sprite.hotPhys.pScreen;
+ ROOT = sprite.hot.pScreen->root;
+ }
+ sprite.hot.x = XE_KBPTR.rootX;
+ sprite.hot.y = XE_KBPTR.rootY;
+ if (sprite.hot.x < sprite.physLimits.x1)
+ sprite.hot.x = sprite.physLimits.x1;
+ else if (sprite.hot.x >= sprite.physLimits.x2)
+ sprite.hot.x = sprite.physLimits.x2 - 1;
+ if (sprite.hot.y < sprite.physLimits.y1)
+ sprite.hot.y = sprite.physLimits.y1;
+ else if (sprite.hot.y >= sprite.physLimits.y2)
+ sprite.hot.y = sprite.physLimits.y2 - 1;
#ifdef SHAPE
-// if (sprite.hotShape)
-// ConfineToShape(sprite.hotShape, &sprite.hot.x, &sprite.hot.y);
+ if (sprite.hotShape)
+ ConfineToShape(sprite.hotShape, &sprite.hot.x, &sprite.hot.y);
#endif
-// sprite.hotPhys = sprite.hot;
-//
-// /*
-// * This code force cursor position to be inside the
-// * root window of the agent. We can't view a reason
-// * to do this and it interacts in an undesirable way
-// * with toggling fullscreen.
-// *
-// * if ((sprite.hotPhys.x != XE_KBPTR.rootX) ||
-// * (sprite.hotPhys.y != XE_KBPTR.rootY))
-// * {
-// * (*sprite.hotPhys.pScreen->SetCursorPosition)(
-// * sprite.hotPhys.pScreen,
-// * sprite.hotPhys.x, sprite.hotPhys.y, FALSE);
-// * }
-// */
-//
-// XE_KBPTR.rootX = sprite.hot.x;
-// XE_KBPTR.rootY = sprite.hot.y;
-// }
-//
-// sprite.win = XYToWindow(sprite.hot.x, sprite.hot.y);
+ sprite.hotPhys = sprite.hot;
+
+#ifdef NXAGENT_SERVER
+ /*
+ * This code force cursor position to be inside the
+ * root window of the agent. We can't view a reason
+ * to do this and it interacts in an undesirable way
+ * with toggling fullscreen.
+ *
+ * if ((sprite.hotPhys.x != XE_KBPTR.rootX) ||
+ * (sprite.hotPhys.y != XE_KBPTR.rootY))
+ * {
+ * (*sprite.hotPhys.pScreen->SetCursorPosition)(
+ * sprite.hotPhys.pScreen,
+ * sprite.hotPhys.x, sprite.hotPhys.y, FALSE);
+ * }
+ */
+#else
+ if ((sprite.hotPhys.x != XE_KBPTR.rootX) ||
+ (sprite.hotPhys.y != XE_KBPTR.rootY))
+ {
+ (*sprite.hotPhys.pScreen->SetCursorPosition)(
+ sprite.hotPhys.pScreen,
+ sprite.hotPhys.x, sprite.hotPhys.y, FALSE);
+ }
+#endif
+ XE_KBPTR.rootX = sprite.hot.x;
+ XE_KBPTR.rootY = sprite.hot.y;
+ }
+
+ sprite.win = XYToWindow(sprite.hot.x, sprite.hot.y);
#ifdef notyet
-// if (!(sprite.win->deliverableEvents &
-// Motion_Filter(inputInfo.pointer->button))
-// !syncEvents.playingEvents)
-// {
-// /* XXX Do PointerNonInterestBox here */
-// }
+ if (!(sprite.win->deliverableEvents &
+ Motion_Filter(inputInfo.pointer->button))
+ !syncEvents.playingEvents)
+ {
+ /* XXX Do PointerNonInterestBox here */
+ }
#endif
-// if (sprite.win != prevSpriteWin)
-// {
-// if (prevSpriteWin != NullWindow) {
-// if (!xE)
-// UpdateCurrentTimeIf();
-// DoEnterLeaveEvents(prevSpriteWin, sprite.win, NotifyNormal);
-// }
-// PostNewCursor();
-// return FALSE;
-// }
-// return TRUE;
-// }
+ if (sprite.win != prevSpriteWin)
+ {
+ if (prevSpriteWin != NullWindow) {
+ if (!xE)
+ UpdateCurrentTimeIf();
+ DoEnterLeaveEvents(prevSpriteWin, sprite.win, NotifyNormal);
+ }
+ PostNewCursor();
+ return FALSE;
+ }
+ return TRUE;
+}
void
DefineInitialRootWindow(register WindowPtr win)