@ -432,8 +432,10 @@ struct sway_container *container_close(struct sway_container *con) {
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						if  ( con - > type  = =  C_VIEW )  { 
 
			
		
	
		
			
				
							view_close ( con - > sway_view ) ; 
 
			
		
	
		
			
				
						}  else  { 
 
			
		
	
		
			
				
							container_for_each_descendant ( con ,  container_close_func ,  NULL ) ; 
 
			
		
	
		
			
				
						}  else  if  ( con - > type  = =  C_CONTAINER )  { 
 
			
		
	
		
			
				
							container_for_each_child ( con ,  container_close_func ,  NULL ) ; 
 
			
		
	
		
			
				
						}  else  if  ( con - > type  = =  C_WORKSPACE )  { 
 
			
		
	
		
			
				
							workspace_for_each_container ( con ,  container_close_func ,  NULL ) ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						return  parent ; 
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -465,23 +467,12 @@ struct sway_container *container_view_create(struct sway_container *sibling,
 
			
		
	
		
			
				
						return  swayc ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					void  container_descendants ( struct  sway_container  * root ,  
			
		
	
		
			
				
							enum  sway_container_type  type , 
 
			
		
	
		
			
				
							void  ( * func ) ( struct  sway_container  * item ,  void  * data ) ,  void  * data )  { 
 
			
		
	
		
			
				
						if  ( ! root - > children  | |  ! root - > children - > length )  { 
 
			
		
	
		
			
				
							return ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						for  ( int  i  =  0 ;  i  <  root - > children - > length ;  + + i )  { 
 
			
		
	
		
			
				
							struct  sway_container  * item  =  root - > children - > items [ i ] ; 
 
			
		
	
		
			
				
							if  ( item - > type  = =  type )  { 
 
			
		
	
		
			
				
								func ( item ,  data ) ; 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
							container_descendants ( item ,  type ,  func ,  data ) ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					struct  sway_container  * container_find ( struct  sway_container  * container ,  
			
		
	
		
			
				
					struct  sway_container  * container_find_child ( struct  sway_container  * container ,  
			
		
	
		
			
				
							bool  ( * test ) ( struct  sway_container  * view ,  void  * data ) ,  void  * data )  { 
 
			
		
	
		
			
				
						if  ( ! sway_assert ( container - > type  = =  C_CONTAINER  | | 
 
			
		
	
		
			
				
									container - > type  = =  C_VIEW ,  " Expected a container or view " ) )  { 
 
			
		
	
		
			
				
							return  NULL ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						if  ( ! container - > children )  { 
 
			
		
	
		
			
				
							return  NULL ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -489,15 +480,11 @@ struct sway_container *container_find(struct sway_container *container,
 
			
		
	
		
			
				
							struct  sway_container  * child  =  container - > children - > items [ i ] ; 
 
			
		
	
		
			
				
							if  ( test ( child ,  data ) )  { 
 
			
		
	
		
			
				
								return  child ; 
 
			
		
	
		
			
				
							}  else  { 
 
			
		
	
		
			
				
								struct  sway_container  * res  =  container_find ( child ,  test ,  data ) ; 
 
			
		
	
		
			
				
								if  ( res )  { 
 
			
		
	
		
			
				
									return  res ; 
 
			
		
	
		
			
				
								} 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						if  ( container - > type  = =  C_WORKSPACE )  { 
 
			
		
	
		
			
				
							return  container_find ( container - > sway_workspace - > floating ,  test ,  data ) ; 
 
			
		
	
		
			
				
							struct  sway_container  * res  =  container_find_child ( child ,  test ,  data ) ; 
 
			
		
	
		
			
				
							if  ( res )  { 
 
			
		
	
		
			
				
								return  res ; 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						return  NULL ; 
 
			
		
	
		
			
				
					}  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -743,26 +730,20 @@ struct sway_container *container_at(struct sway_container *workspace,
 
			
		
	
		
			
				
						return  NULL ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					void  container_for_each_ descendant ( struct  sway_container  * container ,  
			
		
	
		
			
				
					void  container_for_each_ child ( struct  sway_container  * container ,  
			
		
	
		
			
				
							void  ( * f ) ( struct  sway_container  * container ,  void  * data ) , 
 
			
		
	
		
			
				
							void  * data )  { 
 
			
		
	
		
			
				
						if  ( ! container )  { 
 
			
		
	
		
			
				
						if  ( ! sway_assert ( container - > type  = =  C_CONTAINER  | | 
 
			
		
	
		
			
				
									container - > type  = =  C_VIEW ,  " Expected a container or view " ) )  { 
 
			
		
	
		
			
				
							return ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						f ( container ,  data ) ; 
 
			
		
	
		
			
				
						if  ( container - > children )   { 
 
			
		
	
		
			
				
							for  ( int  i  =  0 ;  i  <  container - > children - > length ;  + + i )  { 
 
			
		
	
		
			
				
								struct  sway_container  * child  =  container - > children - > items [ i ] ; 
 
			
		
	
		
			
				
								container_for_each_ descendant ( child ,  f ,  data ) ; 
 
			
		
	
		
			
				
								container_for_each_ child ( child ,  f ,  data ) ; 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						if  ( container - > type  = =  C_WORKSPACE )   { 
 
			
		
	
		
			
				
							struct  sway_container  * floating  =  container - > sway_workspace - > floating ; 
 
			
		
	
		
			
				
							for  ( int  i  =  0 ;  i  <  floating - > children - > length ;  + + i )  { 
 
			
		
	
		
			
				
								struct  sway_container  * child  =  floating - > children - > items [ i ] ; 
 
			
		
	
		
			
				
								container_for_each_descendant ( child ,  f ,  data ) ; 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						f ( container ,  data ) ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					bool  container_has_ancestor ( struct  sway_container  * descendant ,  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -1198,13 +1179,12 @@ void container_set_dirty(struct sway_container *container) {
 
			
		
	
		
			
				
						list_add ( server . dirty_containers ,  container ) ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  bool  find_urgent_iterator ( struct  sway_container  * con ,  
			
		
	
		
			
				
							void  * data )  { 
 
			
		
	
		
			
				
					static  bool  find_urgent_iterator ( struct  sway_container  * con ,  void  * data )  {  
			
		
	
		
			
				
						return  con - > type  = =  C_VIEW  & &  view_is_urgent ( con - > sway_view ) ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					bool  container_has_urgent_child ( struct  sway_container  * container )  {  
			
		
	
		
			
				
						return  container_find ( container ,  find_urgent_iterator ,  NULL ) ; 
 
			
		
	
		
			
				
						return  container_find _child ( container ,  find_urgent_iterator ,  NULL ) ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					void  container_end_mouse_operation ( struct  sway_container  * container )  {  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -1236,7 +1216,7 @@ void container_set_fullscreen(struct sway_container *container, bool enable) {
 
			
		
	
		
			
				
							container_set_fullscreen ( workspace - > sway_workspace - > fullscreen ,  false ) ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						container_for_each_ descendant ( container ,  set_fullscreen_iterator ,  & enable ) ; 
 
			
		
	
		
			
				
						container_for_each_ child ( container ,  set_fullscreen_iterator ,  & enable ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						container - > is_fullscreen  =  enable ;