summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Dänzer <mdaenzer@redhat.com>2020-02-07 12:06:39 +0100
committerMatt Turner <mattst88@gmail.com>2020-02-21 23:21:33 +0000
commita93bce6bfc6c610676a7fbc76639854c5553cb2c (patch)
tree568ad30a740b9b505c2238ec1a1395c607876f70
parent1ba5e528d52ed9d7d67eb45c5d3e04b6f5d22b05 (diff)
xwayland: Split up xwl_screen_post_damage into two phases
The first phase sets the new surface properties for all damaged windows, then the second phase commits all surface updates. This is preparatory for the next change, there should be no observable change in behaviour (other than the order of Wayland protocol requests). Reviewed-by: Adam Jackson <ajax@redhat.com> (cherry picked from commit f88d9b1f779835302e02e255fcd45989db7f488d)
-rw-r--r--hw/xwayland/xwayland.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
index 324c68ccf..de35a5af0 100644
--- a/hw/xwayland/xwayland.c
+++ b/hw/xwayland/xwayland.c
@@ -816,16 +816,16 @@ xwl_window_post_damage(struct xwl_window *xwl_window)
xwl_window->frame_callback = wl_surface_frame(xwl_window->surface);
wl_callback_add_listener(xwl_window->frame_callback, &frame_listener, xwl_window);
- wl_surface_commit(xwl_window->surface);
DamageEmpty(window_get_damage(xwl_window->window));
-
- xorg_list_del(&xwl_window->link_damage);
}
static void
xwl_screen_post_damage(struct xwl_screen *xwl_screen)
{
struct xwl_window *xwl_window, *next_xwl_window;
+ struct xorg_list commit_window_list;
+
+ xorg_list_init(&commit_window_list);
xorg_list_for_each_entry_safe(xwl_window, next_xwl_window,
&xwl_screen->damage_window_list, link_damage) {
@@ -843,6 +843,17 @@ xwl_screen_post_damage(struct xwl_screen *xwl_screen)
#endif
xwl_window_post_damage(xwl_window);
+ xorg_list_del(&xwl_window->link_damage);
+ xorg_list_append(&xwl_window->link_damage, &commit_window_list);
+ }
+
+ if (xorg_list_is_empty(&commit_window_list))
+ return;
+
+ xorg_list_for_each_entry_safe(xwl_window, next_xwl_window,
+ &commit_window_list, link_damage) {
+ wl_surface_commit(xwl_window->surface);
+ xorg_list_del(&xwl_window->link_damage);
}
}