diff --git a/src/backend/wayland/wl_event.c b/src/backend/wayland/wl_event.c index d7ef0c2..6ca97ce 100644 --- a/src/backend/wayland/wl_event.c +++ b/src/backend/wayland/wl_event.c @@ -3,6 +3,7 @@ #endif #include #include +#include #include "../../screen.h" #include "wl_types.h" @@ -11,12 +12,9 @@ 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 && + (!wl_state.session || wl_state.session->active)) { 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);