From: Pierre Ossman Date: Thu, 18 Aug 2016 14:14:55 +0000 (+0200) Subject: Convert pointer coordinates to absolute X-Git-Tag: v1.7.90~93 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=2a66f6f3a0d9cf5b266c304718efbecf976c13d1;p=tigervnc.git 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. --- 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;