desktop-shell: do not forget to reset pending config size after resizes

During interactive resizes, we progressively change the size of the
client surface and send config events with these sizes to the client.
After that, the toplevel->pending.size keeps the size of the last config
event that we've sent, i.e. the surface size after the resize is over.

Later, if the client spontaneously resize (by attaching a buffer with a
different size or setting the viewport destination, for instance), their
surface size will change, but toplevel->pending.size continues being
that old size from after the resize. If something happens and Weston
decides to send a config event, clients may re-allocate to that old
size, resulting in a sudden resize.

This does not happen when a client goes from fullscreen/maximized to
windowed mode because in such cases we are resetting
toplevel->pending.size to zero. So in the next config event that clients
receive they are allowed to attach buffers with the size that they
prefer.

So do the same after a resize: set the pending config size to zero.

Signed-off-by: Leandro Ribeiro <leandro.ribeiro@collabora.com>
(cherry picked from commit ba82af938a87ff088b4aacff3b8ac1b6bb461be2)
dev
Leandro Ribeiro 2 years ago committed by Marius Vlad
parent df70b81ed7
commit d5a3ec5e58
  1. 2
      desktop-shell/shell.c

@ -1209,6 +1209,7 @@ resize_grab_button(struct weston_pointer_grab *grab,
resize->base.shsurf->desktop_surface; resize->base.shsurf->desktop_surface;
weston_desktop_surface_set_resizing(desktop_surface, weston_desktop_surface_set_resizing(desktop_surface,
false); false);
weston_desktop_surface_set_size(desktop_surface, 0, 0);
} }
shell_grab_end(&resize->base); shell_grab_end(&resize->base);
@ -1225,6 +1226,7 @@ resize_grab_cancel(struct weston_pointer_grab *grab)
struct weston_desktop_surface *desktop_surface = struct weston_desktop_surface *desktop_surface =
resize->base.shsurf->desktop_surface; resize->base.shsurf->desktop_surface;
weston_desktop_surface_set_resizing(desktop_surface, false); weston_desktop_surface_set_resizing(desktop_surface, false);
weston_desktop_surface_set_size(desktop_surface, 0, 0);
} }
shell_grab_end(&resize->base); shell_grab_end(&resize->base);

Loading…
Cancel
Save