Browse Source

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.
tags/v1.7.90
Pierre Ossman 7 years ago
parent
commit
af7fb8dad3

+ 10
- 0
unix/xserver/hw/vnc/XorgGlue.c View File

@@ -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;

+ 2
- 0
unix/xserver/hw/vnc/XorgGlue.h View File

@@ -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);


+ 4
- 1
unix/xserver/hw/vnc/XserverDesktop.cc View File

@@ -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);
}


Loading…
Cancel
Save