diff options
Diffstat (limited to 'hw')
-rw-r--r-- | hw/xwayland/xwayland-screen.c | 14 | ||||
-rw-r--r-- | hw/xwayland/xwayland-window.c | 3 |
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 |