scene/subsurface_tree: hide unmapped subsurfaces
This commit is contained in:
		
							parent
							
								
									8e225261f0
								
							
						
					
					
						commit
						cc2ebd9fc0
					
				|  | @ -19,6 +19,8 @@ struct wlr_scene_subsurface_tree { | |||
| 	struct wl_listener tree_destroy; | ||||
| 	struct wl_listener surface_destroy; | ||||
| 	struct wl_listener surface_commit; | ||||
| 	struct wl_listener surface_map; | ||||
| 	struct wl_listener surface_unmap; | ||||
| 	struct wl_listener surface_new_subsurface; | ||||
| }; | ||||
| 
 | ||||
|  | @ -33,6 +35,8 @@ static void subsurface_tree_handle_tree_destroy(struct wl_listener *listener, | |||
| 	wl_list_remove(&subsurface_tree->tree_destroy.link); | ||||
| 	wl_list_remove(&subsurface_tree->surface_destroy.link); | ||||
| 	wl_list_remove(&subsurface_tree->surface_commit.link); | ||||
| 	wl_list_remove(&subsurface_tree->surface_map.link); | ||||
| 	wl_list_remove(&subsurface_tree->surface_unmap.link); | ||||
| 	wl_list_remove(&subsurface_tree->surface_new_subsurface.link); | ||||
| 	free(subsurface_tree); | ||||
| } | ||||
|  | @ -102,6 +106,22 @@ static void subsurface_tree_handle_surface_commit(struct wl_listener *listener, | |||
| 	subsurface_tree_reconfigure(subsurface_tree); | ||||
| } | ||||
| 
 | ||||
| static void subsurface_tree_handle_surface_map(struct wl_listener *listener, | ||||
| 		void *data) { | ||||
| 	struct wlr_scene_subsurface_tree *subsurface_tree = | ||||
| 		wl_container_of(listener, subsurface_tree, surface_map); | ||||
| 
 | ||||
| 	wlr_scene_node_set_enabled(&subsurface_tree->tree->node, true); | ||||
| } | ||||
| 
 | ||||
| static void subsurface_tree_handle_surface_unmap(struct wl_listener *listener, | ||||
| 		void *data) { | ||||
| 	struct wlr_scene_subsurface_tree *subsurface_tree = | ||||
| 		wl_container_of(listener, subsurface_tree, surface_unmap); | ||||
| 
 | ||||
| 	wlr_scene_node_set_enabled(&subsurface_tree->tree->node, false); | ||||
| } | ||||
| 
 | ||||
| static void subsurface_tree_addon_destroy(struct wlr_addon *addon) { | ||||
| 	struct wlr_scene_subsurface_tree *subsurface_tree = | ||||
| 		wl_container_of(addon, subsurface_tree, surface_addon); | ||||
|  | @ -126,9 +146,14 @@ static bool subsurface_tree_create_subsurface( | |||
| 	} | ||||
| 
 | ||||
| 	child->parent = parent; | ||||
| 	wlr_scene_node_set_enabled(&child->tree->node, subsurface->mapped); | ||||
| 
 | ||||
| 	wlr_addon_init(&child->surface_addon, &subsurface->surface->addons, | ||||
| 		parent, &subsurface_tree_addon_impl); | ||||
| 
 | ||||
| 	wl_signal_add(&subsurface->events.map, &child->surface_map); | ||||
| 	wl_signal_add(&subsurface->events.unmap, &child->surface_unmap); | ||||
| 
 | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
|  | @ -189,6 +214,12 @@ static struct wlr_scene_subsurface_tree *scene_surface_tree_create( | |||
| 	subsurface_tree->surface_commit.notify = subsurface_tree_handle_surface_commit; | ||||
| 	wl_signal_add(&surface->events.commit, &subsurface_tree->surface_commit); | ||||
| 
 | ||||
| 	subsurface_tree->surface_map.notify = subsurface_tree_handle_surface_map; | ||||
| 	wl_list_init(&subsurface_tree->surface_map.link); | ||||
| 
 | ||||
| 	subsurface_tree->surface_unmap.notify = subsurface_tree_handle_surface_unmap; | ||||
| 	wl_list_init(&subsurface_tree->surface_unmap.link); | ||||
| 
 | ||||
| 	subsurface_tree->surface_new_subsurface.notify = | ||||
| 		subsurface_tree_handle_surface_new_subsurface; | ||||
| 	wl_signal_add(&surface->events.new_subsurface, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue