diff options
| -rw-r--r-- | types/scene/wlr_scene.c | 15 | 
1 files changed, 11 insertions, 4 deletions
diff --git a/types/scene/wlr_scene.c b/types/scene/wlr_scene.c index 7b550963..a0c06b6b 100644 --- a/types/scene/wlr_scene.c +++ b/types/scene/wlr_scene.c @@ -236,10 +236,6 @@ static void scene_surface_handle_surface_commit(struct wl_listener *listener,  		wl_container_of(listener, scene_surface, surface_commit);  	struct wlr_surface *surface = scene_surface->surface; -	if (!pixman_region32_not_empty(&surface->buffer_damage)) { -		return; -	} -  	struct wlr_scene *scene = scene_node_get_root(&scene_surface->node);  	int lx, ly; @@ -256,6 +252,17 @@ static void scene_surface_handle_surface_commit(struct wl_listener *listener,  		return;  	} +	// Even if the surface hasn't submitted damage, schedule a new frame if +	// the client has requested a wl_surface.frame callback. +	if (!wl_list_empty(&surface->current.frame_callback_list) && +			scene_surface->primary_output != NULL) { +		wlr_output_schedule_frame(scene_surface->primary_output); +	} + +	if (!pixman_region32_not_empty(&surface->buffer_damage)) { +		return; +	} +  	struct wlr_scene_output *scene_output;  	wl_list_for_each(scene_output, &scene->outputs, link) {  		struct wlr_output *output = scene_output->output;  | 
