From 2a66f6f3a0d9cf5b266c304718efbecf976c13d1 Mon Sep 17 00:00:00 2001 From: Pierre Ossman Date: Thu, 18 Aug 2016 16:14:55 +0200 Subject: [PATCH] Convert pointer coordinates to absolute It is possible to set pointer coordinate using absolute numbers, but getting them back will always give us screen relative ones. Do the necessary calculations manually so we return sane values to the caller. --- unix/xserver/hw/vnc/Input.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/unix/xserver/hw/vnc/Input.c b/unix/xserver/hw/vnc/Input.c index 55befa75..64305cbc 100644 --- a/unix/xserver/hw/vnc/Input.c +++ b/unix/xserver/hw/vnc/Input.c @@ -33,7 +33,9 @@ #include "inpututils.h" #endif #include "mi.h" +#include "mipointer.h" #include "exevents.h" +#include "scrnintstr.h" #include "xkbsrv.h" #include "xkbstr.h" #include "xserver-properties.h" @@ -186,8 +188,16 @@ void vncPointerMove(int x, int y) void vncGetPointerPos(int *x, int *y) { - if (vncPointerDev != NULL) - GetSpritePosition(vncPointerDev, &cursorPosX, &cursorPosY); + if (vncPointerDev != NULL) { + ScreenPtr ptrScreen; + + miPointerGetPosition(vncPointerDev, &cursorPosX, &cursorPosY); + + /* Pointer coordinates are screen relative */ + ptrScreen = miPointerGetScreen(vncPointerDev); + cursorPosX += ptrScreen->x; + cursorPosY += ptrScreen->y; + } *x = cursorPosX; *y = cursorPosY; -- 2.39.5