From: Pierre Ossman Date: Thu, 18 Aug 2016 14:16:45 +0000 (+0200) Subject: Adjust client pointer coordinates to absolute X-Git-Tag: v1.7.90~92 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=af7fb8dad3f5dadce417b58ff28638b55d7f1cb3;p=tigervnc.git Adjust client pointer coordinates to absolute The client is not aware of where the screen is placed so it will give us screen relative coordinates. Convert to and from these and absolute coordinates before interacting with the input layer. --- diff --git a/unix/xserver/hw/vnc/XorgGlue.c b/unix/xserver/hw/vnc/XorgGlue.c index d7892b18..712ed6af 100644 --- a/unix/xserver/hw/vnc/XorgGlue.c +++ b/unix/xserver/hw/vnc/XorgGlue.c @@ -92,6 +92,16 @@ void vncGetScreenFormat(int scrIdx, int *depth, int *bpp, *blueMask = vis->blueMask; } +int vncGetScreenX(int scrIdx) +{ + return screenInfo.screens[scrIdx]->x; +} + +int vncGetScreenY(int scrIdx) +{ + return screenInfo.screens[scrIdx]->y; +} + int vncGetScreenWidth(int scrIdx) { return screenInfo.screens[scrIdx]->width; diff --git a/unix/xserver/hw/vnc/XorgGlue.h b/unix/xserver/hw/vnc/XorgGlue.h index 92b0d18d..5cae860a 100644 --- a/unix/xserver/hw/vnc/XorgGlue.h +++ b/unix/xserver/hw/vnc/XorgGlue.h @@ -33,6 +33,8 @@ void vncGetScreenFormat(int scrIdx, int *depth, int *bpp, int *trueColour, int *bigEndian, int *redMask, int *greenMask, int *blueMask); +int vncGetScreenX(int scrIdx); +int vncGetScreenY(int scrIdx); int vncGetScreenWidth(int scrIdx); int vncGetScreenHeight(int scrIdx); diff --git a/unix/xserver/hw/vnc/XserverDesktop.cc b/unix/xserver/hw/vnc/XserverDesktop.cc index 4eaa41f3..4f82a544 100644 --- a/unix/xserver/hw/vnc/XserverDesktop.cc +++ b/unix/xserver/hw/vnc/XserverDesktop.cc @@ -514,6 +514,8 @@ void XserverDesktop::readWakeupHandler(fd_set* fds, int nfds) // We are responsible for propagating mouse movement between clients int cursorX, cursorY; vncGetPointerPos(&cursorX, &cursorY); + cursorX -= vncGetScreenX(screenIndex); + cursorY -= vncGetScreenY(screenIndex); if (oldCursorPos.x != cursorX || oldCursorPos.y != cursorY) { oldCursorPos.x = cursorX; oldCursorPos.y = cursorY; @@ -648,7 +650,8 @@ void XserverDesktop::approveConnection(uint32_t opaqueId, bool accept, void XserverDesktop::pointerEvent(const Point& pos, int buttonMask) { - vncPointerMove(pos.x, pos.y); + vncPointerMove(pos.x + vncGetScreenX(screenIndex), + pos.y + vncGetScreenY(screenIndex)); vncPointerButtonAction(buttonMask); }