Skip to content

Commit

Permalink
wayland: Prevent popup configure events from overwriting the current …
Browse files Browse the repository at this point in the history
…size with old data

Don't apply the supplied dimensions if they haven't changed from the last configuration event, or a newer size set programmatically can be overwritten by old data.

This check is already being done for toplevel windows, but was never added to the popup configure event.
  • Loading branch information
Kontrabant committed Dec 28, 2024
1 parent c714b1a commit b8ea7fa
Showing 1 changed file with 23 additions and 7 deletions.
30 changes: 23 additions & 7 deletions src/video/wayland/SDL_waylandwindow.c
Original file line number Diff line number Diff line change
Expand Up @@ -1026,16 +1026,32 @@ static void handle_configure_xdg_popup(void *data,
x -= offset_x;
y -= offset_y;

wind->requested.logical_width = width;
wind->requested.logical_height = height;
/* This happens when the compositor indicates that the size is
* up to the client, so use the cached window size here.
*/
if (width == 0 || height == 0) {
width = wind->sdlwindow->floating.w;
height = wind->sdlwindow->floating.h;
}

if (wind->scale_to_display) {
x = PointToPixel(wind->sdlwindow->parent, x);
y = PointToPixel(wind->sdlwindow->parent, y);
wind->requested.pixel_width = PointToPixel(wind->sdlwindow, width);
wind->requested.pixel_height = PointToPixel(wind->sdlwindow, height);
/* Don't apply the supplied dimensions if they haven't changed from the last configuration
* event, or a newer size set programmatically can be overwritten by old data.
*/
if (width != wind->last_configure.width || height != wind->last_configure.height) {
wind->requested.logical_width = width;
wind->requested.logical_height = height;

if (wind->scale_to_display) {
x = PointToPixel(wind->sdlwindow->parent, x);
y = PointToPixel(wind->sdlwindow->parent, y);
wind->requested.pixel_width = PointToPixel(wind->sdlwindow, width);
wind->requested.pixel_height = PointToPixel(wind->sdlwindow, height);
}
}

wind->last_configure.width = width;
wind->last_configure.height = height;

SDL_SendWindowEvent(wind->sdlwindow, SDL_EVENT_WINDOW_MOVED, x, y);

if (wind->shell_surface_status == WAYLAND_SHELL_SURFACE_STATUS_WAITING_FOR_CONFIGURE) {
Expand Down

0 comments on commit b8ea7fa

Please sign in to comment.