From 3a916c6d7b5bc0eb6c244c095ec72a51e33e7af8 Mon Sep 17 00:00:00 2001 From: Dmitry Rekman Date: Wed, 29 Oct 2014 22:55:40 -0400 Subject: [PATCH] X11: Fixed SDL_GetGlobalMouseState() to work better with multimonitor configs. Fixes Bugzilla #2770. Thanks to Epic Games for contributing this fix. --- src/video/x11/SDL_x11mouse.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/video/x11/SDL_x11mouse.c b/src/video/x11/SDL_x11mouse.c index 02d96da77..d3ec61902 100644 --- a/src/video/x11/SDL_x11mouse.c +++ b/src/video/x11/SDL_x11mouse.c @@ -382,8 +382,14 @@ X11_GetGlobalMouseState(int *x, int *y) retval |= (mask & Button1Mask) ? SDL_BUTTON_LMASK : 0; retval |= (mask & Button2Mask) ? SDL_BUTTON_MMASK : 0; retval |= (mask & Button3Mask) ? SDL_BUTTON_RMASK : 0; - *x = data->x + rootx; - *y = data->y + rooty; + /* SDL_DisplayData->x,y point to screen origin, and adding them to mouse coordinates relative to root window doesn't do the right thing + * (observed on dual monitor setup with primary display being the rightmost one - mouse was offset to the right). + * + * Adding root position to root-relative coordinates seems to be a better way to get absolute position. */ + XWindowAttributes root_attrs; + X11_XGetWindowAttributes(display, root, &root_attrs); + *x = root_attrs.x + rootx; + *y = root_attrs.y + rooty; return retval; } }