wayland: fix animation rendering — dispatch after scene commit

Animation loops (iconify/shade zoom) call event_flush repeatedly
with wusleep delays. The scene commit returned immediately without
waiting for the DRM page flip, so only the final frame was visible.

After committing, flush clients and dispatch the event loop once to
process the page-flip completion. This allows the next commit in the
animation loop to succeed, producing smooth multi-frame animations.
This commit is contained in:
lkn 2026-06-25 09:49:07 +02:00
parent 9f86c6091c
commit 9752672367
1 changed files with 9 additions and 1 deletions

View File

@ -11,8 +11,16 @@ void wl_event_flush(void)
{
wl_xdisplay_flush();
/* Commit the scene so intermediate animation frames are visible */
if (wl_state.scene_output && wl_state.allocator)
if (wl_state.scene_output && wl_state.allocator) {
wlr_scene_output_commit(wl_state.scene_output, NULL);
/* Flush the display so the frame reaches the DRM backend,
* then dispatch to process the page-flip completion event
* before returning. Without this, animation loops that
* call event_flush repeatedly only show the final frame. */
wl_display_flush_clients(wl_state.display);
struct wl_event_loop *loop = wl_display_get_event_loop(wl_state.display);
wl_event_loop_dispatch(loop, 0);
}
}
void wl_event_flush_expose(void) {}
void wl_event_sync(int discard)