summaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
Diffstat (limited to 'hw')
-rw-r--r--hw/xwayland/xwayland-screen.c14
-rw-r--r--hw/xwayland/xwayland-window.c3
2 files changed, 14 insertions, 3 deletions
diff --git a/hw/xwayland/xwayland-screen.c b/hw/xwayland/xwayland-screen.c
index b84252306..428f176d5 100644
--- a/hw/xwayland/xwayland-screen.c
+++ b/hw/xwayland/xwayland-screen.c
@@ -273,6 +273,9 @@ 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) {
@@ -290,6 +293,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);
}
}
diff --git a/hw/xwayland/xwayland-window.c b/hw/xwayland/xwayland-window.c
index a9128fb3d..dc12b8e21 100644
--- a/hw/xwayland/xwayland-window.c
+++ b/hw/xwayland/xwayland-window.c
@@ -808,10 +808,7 @@ xwl_window_post_damage(struct xwl_window *xwl_window)
}
xwl_window_create_frame_callback(xwl_window);
- wl_surface_commit(xwl_window->surface);
DamageEmpty(window_get_damage(xwl_window->window));
-
- xorg_list_del(&xwl_window->link_damage);
}
Bool