diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c index 972d98ab0..fdd0ba3ab 100644 --- a/src/video/x11/SDL_x11window.c +++ b/src/video/x11/SDL_x11window.c @@ -1369,18 +1369,23 @@ void X11_ShowWindow(SDL_VideoDevice *_this, SDL_Window *window) X11_XSync(display, False); X11_PumpEvents(_this); - int x = data->last_xconfigure.x; - int y = data->last_xconfigure.y; - SDL_GlobalToRelativeForWindow(data->window, x, y, &x, &y); + /* If a configure event was received (type is non-zero), send the final window size and coordinates. */ + if (data->last_xconfigure.type) { + int x = data->last_xconfigure.x; + int y = data->last_xconfigure.y; + SDL_GlobalToRelativeForWindow(data->window, x, y, &x, &y); - /* If the borders appeared, this happened automatically in the event system, otherwise, set the position now. */ - if (data->disable_size_position_events && (window->x != x || window->y != y)) { - data->pending_operation = X11_PENDING_OP_MOVE; - X11_XMoveWindow(display, data->xwindow, window->x, window->y); + /* If the borders appeared, this happened automatically in the event system, otherwise, set the position now. */ + if (data->disable_size_position_events && (window->x != x || window->y != y)) { + data->pending_operation = X11_PENDING_OP_MOVE; + X11_XMoveWindow(display, data->xwindow, window->x, window->y); + } + + SDL_SendWindowEvent(window, SDL_EVENT_WINDOW_RESIZED, data->last_xconfigure.width, data->last_xconfigure.height); + SDL_SendWindowEvent(window, SDL_EVENT_WINDOW_MOVED, x, y); } + data->disable_size_position_events = SDL_FALSE; - SDL_SendWindowEvent(window, SDL_EVENT_WINDOW_RESIZED, data->last_xconfigure.width, data->last_xconfigure.height); - SDL_SendWindowEvent(window, SDL_EVENT_WINDOW_MOVED, x, y); } void X11_HideWindow(SDL_VideoDevice *_this, SDL_Window *window)