x11: make sure SDL_GetGlobalMouseState notices mouse warping through SDL APIs.

This commit is contained in:
Ryan C. Gordon 2017-09-05 16:15:54 -04:00
parent 0782f9be51
commit c9e73c3e00
1 changed files with 12 additions and 8 deletions

View File

@ -308,23 +308,27 @@ X11_ShowCursor(SDL_Cursor * cursor)
return 0;
}
static void
WarpMouseInternal(Window xwindow, const int x, const int y)
{
SDL_VideoData *videodata = (SDL_VideoData *) SDL_GetVideoDevice()->driverdata;
Display *display = videodata->display;
X11_XWarpPointer(display, None, xwindow, 0, 0, 0, 0, x, y);
X11_XSync(display, False);
videodata->global_mouse_changed = SDL_TRUE;
}
static void
X11_WarpMouse(SDL_Window * window, int x, int y)
{
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
Display *display = data->videodata->display;
X11_XWarpPointer(display, None, data->xwindow, 0, 0, 0, 0, x, y);
X11_XSync(display, False);
WarpMouseInternal(data->xwindow, x, y);
}
static int
X11_WarpMouseGlobal(int x, int y)
{
Display *display = GetDisplay();
X11_XWarpPointer(display, None, DefaultRootWindow(display), 0, 0, 0, 0, x, y);
X11_XSync(display, False);
WarpMouseInternal(DefaultRootWindow(GetDisplay()), x, y);
return 0;
}