Explorar o código

X11: Fixed SDL_GetGlobalMouseState() to work better with multimonitor configs.

Fixes Bugzilla #2770.

Thanks to Epic Games for contributing this fix.
Dmitry Rekman %!s(int64=11) %!d(string=hai) anos
pai
achega
3a916c6d7b
Modificáronse 1 ficheiros con 8 adicións e 2 borrados
  1. 8 2
      src/video/x11/SDL_x11mouse.c

+ 8 - 2
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;
             }
         }