| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1348,10 +1348,20 @@ static void compositor_handle_display_destroy(
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							wl_container_of(listener, compositor, display_destroy);
 | 
					 | 
					 | 
					 | 
							wl_container_of(listener, compositor, display_destroy);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						wl_signal_emit_mutable(&compositor->events.destroy, NULL);
 | 
					 | 
					 | 
					 | 
						wl_signal_emit_mutable(&compositor->events.destroy, NULL);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						wl_list_remove(&compositor->display_destroy.link);
 | 
					 | 
					 | 
					 | 
						wl_list_remove(&compositor->display_destroy.link);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						wl_list_remove(&compositor->renderer_destroy.link);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						wl_global_destroy(compositor->global);
 | 
					 | 
					 | 
					 | 
						wl_global_destroy(compositor->global);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						free(compositor);
 | 
					 | 
					 | 
					 | 
						free(compositor);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					static void compositor_handle_renderer_destroy(
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							struct wl_listener *listener, void *data) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						struct wlr_compositor *compositor =
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							wl_container_of(listener, compositor, renderer_destroy);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						compositor->renderer = NULL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						wl_list_remove(&compositor->renderer_destroy.link);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						wl_list_init(&compositor->renderer_destroy.link);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					struct wlr_compositor *wlr_compositor_create(struct wl_display *display,
 | 
					 | 
					 | 
					 | 
					struct wlr_compositor *wlr_compositor_create(struct wl_display *display,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							uint32_t version, struct wlr_renderer *renderer) {
 | 
					 | 
					 | 
					 | 
							uint32_t version, struct wlr_renderer *renderer) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						assert(version <= COMPOSITOR_VERSION);
 | 
					 | 
					 | 
					 | 
						assert(version <= COMPOSITOR_VERSION);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -1375,6 +1385,13 @@ struct wlr_compositor *wlr_compositor_create(struct wl_display *display,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						compositor->display_destroy.notify = compositor_handle_display_destroy;
 | 
					 | 
					 | 
					 | 
						compositor->display_destroy.notify = compositor_handle_display_destroy;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						wl_display_add_destroy_listener(display, &compositor->display_destroy);
 | 
					 | 
					 | 
					 | 
						wl_display_add_destroy_listener(display, &compositor->display_destroy);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						if (renderer != NULL) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							compositor->renderer_destroy.notify = compositor_handle_renderer_destroy;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							wl_signal_add(&renderer->events.destroy, &compositor->renderer_destroy);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						} else {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							wl_list_init(&compositor->renderer_destroy.link);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						return compositor;
 | 
					 | 
					 | 
					 | 
						return compositor;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |