@ -709,6 +709,7 @@ static bool drm_connector_move_cursor(struct wlr_output *output,
 
			
		
	
		
		
			
				
					
					static  void  drm_connector_destroy ( struct  wlr_output  * output )  { static  void  drm_connector_destroy ( struct  wlr_output  * output )  {  
			
		
	
		
		
			
				
					
						struct  wlr_drm_connector  * conn  =  get_drm_connector_from_output ( output ) ; 
	struct  wlr_drm_connector  * conn  =  get_drm_connector_from_output ( output ) ; 
 
			
		
	
		
		
			
				
					
						drm_connector_cleanup ( conn ) ; 
	drm_connector_cleanup ( conn ) ; 
 
			
		
	
		
		
			
				
					
						drmModeFreeCrtc ( conn - > old_crtc ) ; 
 
			
		
	
		
		
			
				
					
						wl_event_source_remove ( conn - > retry_pageflip ) ; 
	wl_event_source_remove ( conn - > retry_pageflip ) ; 
 
			
		
	
		
		
			
				
					
						wl_list_remove ( & conn - > link ) ; 
	wl_list_remove ( & conn - > link ) ; 
 
			
		
	
		
		
			
				
					
						free ( conn ) ; 
	free ( conn ) ; 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -1088,10 +1089,11 @@ void scan_drm_connectors(struct wlr_drm_backend *drm) {
 
			
		
	
		
		
			
				
					
							wlr_log ( WLR_INFO ,  " '%s' disappeared " ,  conn - > output . name ) ; 
		wlr_log ( WLR_INFO ,  " '%s' disappeared " ,  conn - > output . name ) ; 
 
			
		
	
		
		
			
				
					
							drm_connector_cleanup ( conn ) ; 
		drm_connector_cleanup ( conn ) ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
							drmModeFreeCrtc ( conn - > old_crtc ) ; 
		if  ( conn - > pageflip_pending )  { 
 
			
				
				
			
		
	
		
		
			
				
					
							wl_event_source_remove ( conn - > retry_pageflip ) ; 
			conn - > state  =  WLR_DRM_CONN_DISAPPEARED ; 
 
			
				
				
			
		
	
		
		
			
				
					
							wl_list_remove ( & conn - > link ) ; 
		}  else  { 
 
			
				
				
			
		
	
		
		
			
				
					
							free ( conn ) ; 
			wlr_output_destroy ( & conn - > output ) ; 
 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
							} 
 
			
		
	
		
		
			
				
					
						} 
	} 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
						bool  changed_outputs [ wl_list_length ( & drm - > outputs ) ] ; 
	bool  changed_outputs [ wl_list_length ( & drm - > outputs ) ] ; 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -1133,6 +1135,12 @@ static void page_flip_handler(int fd, unsigned seq,
 
			
		
	
		
		
			
				
					
							get_drm_backend_from_backend ( conn - > output . backend ) ; 
		get_drm_backend_from_backend ( conn - > output . backend ) ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
						conn - > pageflip_pending  =  false ; 
	conn - > pageflip_pending  =  false ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
						if  ( conn - > state  = =  WLR_DRM_CONN_DISAPPEARED )  { 
 
			
		
	
		
		
			
				
					
							wlr_output_destroy ( & conn - > output ) ; 
 
			
		
	
		
		
			
				
					
							return ; 
 
			
		
	
		
		
			
				
					
						} 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
						if  ( conn - > state  ! =  WLR_DRM_CONN_CONNECTED  | |  conn - > crtc  = =  NULL )  { 
	if  ( conn - > state  ! =  WLR_DRM_CONN_CONNECTED  | |  conn - > crtc  = =  NULL )  { 
 
			
		
	
		
		
			
				
					
							return ; 
		return ; 
 
			
		
	
		
		
			
				
					
						} 
	} 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -1193,7 +1201,6 @@ void restore_drm_outputs(struct wlr_drm_backend *drm) {
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
							drmModeSetCrtc ( drm - > fd ,  crtc - > crtc_id ,  crtc - > buffer_id ,  crtc - > x ,  crtc - > y , 
		drmModeSetCrtc ( drm - > fd ,  crtc - > crtc_id ,  crtc - > buffer_id ,  crtc - > x ,  crtc - > y , 
 
			
		
	
		
		
			
				
					
								& conn - > id ,  1 ,  & crtc - > mode ) ; 
			& conn - > id ,  1 ,  & crtc - > mode ) ; 
 
			
		
	
		
		
			
				
					
							drmModeFreeCrtc ( crtc ) ; 
 
			
		
	
		
		
			
				
					
						} 
	} 
 
			
		
	
		
		
			
				
					
					} }  
			
		
	
		
		
			
				
					
					
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -1248,6 +1255,8 @@ static void drm_connector_cleanup(struct wlr_drm_connector *conn) {
 
			
		
	
		
		
			
				
					
							break ; 
		break ; 
 
			
		
	
		
		
			
				
					
						case  WLR_DRM_CONN_DISCONNECTED : 
	case  WLR_DRM_CONN_DISCONNECTED : 
 
			
		
	
		
		
			
				
					
							break ; 
		break ; 
 
			
		
	
		
		
			
				
					
						case  WLR_DRM_CONN_DISAPPEARED : 
 
			
		
	
		
		
			
				
					
							return ;  // don't change state
 
 
			
		
	
		
		
			
				
					
						} 
	} 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
						conn - > state  =  WLR_DRM_CONN_DISCONNECTED ; 
	conn - > state  =  WLR_DRM_CONN_DISCONNECTED ;