mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-11-05 02:04:31 +00:00
x11: Ensure that a configure event was received before sending the final window size and coordinates
Headless display servers might not send an initial configure event, so don't assume that one has arrived and send garbage size/position values when showing a window.
This commit is contained in:
@@ -1369,6 +1369,8 @@ void X11_ShowWindow(SDL_VideoDevice *_this, SDL_Window *window)
|
|||||||
X11_XSync(display, False);
|
X11_XSync(display, False);
|
||||||
X11_PumpEvents(_this);
|
X11_PumpEvents(_this);
|
||||||
|
|
||||||
|
/* 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 x = data->last_xconfigure.x;
|
||||||
int y = data->last_xconfigure.y;
|
int y = data->last_xconfigure.y;
|
||||||
SDL_GlobalToRelativeForWindow(data->window, x, y, &x, &y);
|
SDL_GlobalToRelativeForWindow(data->window, x, y, &x, &y);
|
||||||
@@ -1378,9 +1380,12 @@ void X11_ShowWindow(SDL_VideoDevice *_this, SDL_Window *window)
|
|||||||
data->pending_operation = X11_PENDING_OP_MOVE;
|
data->pending_operation = X11_PENDING_OP_MOVE;
|
||||||
X11_XMoveWindow(display, data->xwindow, window->x, window->y);
|
X11_XMoveWindow(display, data->xwindow, window->x, window->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_RESIZED, data->last_xconfigure.width, data->last_xconfigure.height);
|
||||||
SDL_SendWindowEvent(window, SDL_EVENT_WINDOW_MOVED, x, y);
|
SDL_SendWindowEvent(window, SDL_EVENT_WINDOW_MOVED, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
data->disable_size_position_events = SDL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void X11_HideWindow(SDL_VideoDevice *_this, SDL_Window *window)
|
void X11_HideWindow(SDL_VideoDevice *_this, SDL_Window *window)
|
||||||
|
|||||||
Reference in New Issue
Block a user