Skip to content

Commit

Permalink
x11: check if the X server honored our XMoveWindow() call (thanks, R.…
Browse files Browse the repository at this point in the history
…E. Rust!).

This can happen if a window is still grabbed when we try to move it, or if
the X11 ecosystem is just in a bad mood, I guess.

This makes sure that SDL will report the correct position for a window;
otherwise, SDL_GetWindowPosition will just report whatever the last
SDL_SetWindowPosition call requested, even if the window didn't actually move.

Fixes Bugzilla #4646.
  • Loading branch information
icculus committed Oct 27, 2019
1 parent a963e36 commit c0255be
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/video/x11/SDL_x11window.c
Expand Up @@ -805,9 +805,24 @@ X11_SetWindowPosition(_THIS, SDL_Window * window)
{
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
Display *display = data->videodata->display;
unsigned int childCount;
Window childReturn, root, parent;
Window* children;
XWindowAttributes attrs;

/*Attempt to move the window*/
X11_XMoveWindow(display, data->xwindow, window->x - data->border_left, window->y - data->border_top);
X11_XFlush(display);

/*If the window is not moved, then the coordinates on the window structure are out of sync, so we
update them here. */
X11_XQueryTree(display, data->xwindow, &root, &parent, &children, &childCount);
X11_XGetWindowAttributes(display, data->xwindow, &attrs);
X11_XTranslateCoordinates(display,
parent, DefaultRootWindow(display),
attrs.x, attrs.y,
&window->x, &window->y,
&childReturn);
}

void
Expand Down

0 comments on commit c0255be

Please sign in to comment.