xdg-shell: split last-acked and current state

These states are distinct in the time period between the ack_configure
and the next commit on the surface. Splitting these states avoids the
following race for example:

- client starts at 1000x1000
- wlr_xdg_toplevel_set_size 500x500
- size is different -> configure sent
- client acks the configure
- wlr_xdg_toplevel_set_size 1000x1000
- compare_xdg_toplevel_state returns true since there is no pending
  configure and the currently committed size is still 1000x1000
- no new configure is sent
- client commits at the size it last acked, 500x500
This commit is contained in:
Isaac Freund 2020-07-20 23:43:03 +02:00 committed by Simon Ser
parent 330c50b48d
commit 2072d59da5
4 changed files with 35 additions and 57 deletions

View file

@ -124,6 +124,7 @@ struct wlr_xdg_toplevel {
struct wlr_xdg_toplevel_state client_pending;
struct wlr_xdg_toplevel_state server_pending;
struct wlr_xdg_toplevel_state last_acked;
struct wlr_xdg_toplevel_state current;
char *title;

View file

@ -139,6 +139,7 @@ struct wlr_xdg_toplevel_v6 {
struct wlr_xdg_toplevel_v6_state client_pending;
struct wlr_xdg_toplevel_v6_state server_pending;
struct wlr_xdg_toplevel_v6_state last_acked;
struct wlr_xdg_toplevel_v6_state current;
char *title;