@ -1,3 +1,4 @@
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# define _POSIX_C_SOURCE 200809L 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# include  <stdlib.h> 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# include  <wayland-server.h> 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# include  <wlr/render/wlr_renderer.h> 
 
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -67,6 +68,18 @@ const char *view_get_instance(struct sway_view *view) {
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						return  NULL ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					const  char  * view_get_type ( struct  sway_view  * view )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						switch ( view - > type )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						case  SWAY_VIEW_WL_SHELL : 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							return  " wl_shell " ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						case  SWAY_VIEW_XDG_SHELL_V6 : 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							return  " xdg_shell_v6 " ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						case  SWAY_VIEW_XWAYLAND : 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							return  " xwayland " ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						return  " unknown " ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					void  view_configure ( struct  sway_view  * view ,  double  ox ,  double  oy ,  int  width , 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							int  height )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( view - > impl - > configure )  { 
 
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -348,6 +361,11 @@ void view_unmap(struct sway_view *view) {
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						view - > swayc  =  NULL ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						view - > surface  =  NULL ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( view - > title_format )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							free ( view - > title_format ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							view - > title_format  =  NULL ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( parent - > type  = =  C_OUTPUT )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							arrange_output ( parent ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}  else  { 
 
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -475,3 +493,127 @@ void view_child_destroy(struct sway_view_child *child) {
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							free ( child ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  char  * parse_title_format ( struct  sway_view  * view )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( ! view - > title_format  | |  strcmp ( view - > title_format ,  " %title " )  = =  0 )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							return  strdup ( view_get_title ( view ) ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						const  char  * title  =  view_get_title ( view ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						const  char  * class  =  view_get_class ( view ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						const  char  * instance  =  view_get_instance ( view ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						const  char  * shell  =  view_get_type ( view ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						size_t  title_len  =  title  ?  strlen ( title )  :  0 ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						size_t  class_len  =  class  ?  strlen ( class )  :  0 ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						size_t  instance_len  =  instance  ?  strlen ( instance )  :  0 ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						size_t  shell_len  =  shell  ?  strlen ( shell )  :  0 ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						// First, determine the length
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						size_t  len  =  0 ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						char  * format  =  view - > title_format ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						char  * next  =  strchr ( format ,  ' % ' ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						while  ( next )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							len  + =  next  -  format ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							format  =  next ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							if  ( strncmp ( next ,  " %title " ,  6 )  = =  0 )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								len  + =  title_len ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								format  + =  6 ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  else  if  ( strncmp ( next ,  " %class " ,  6 )  = =  0 )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								len  + =  class_len ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								format  + =  6 ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  else  if  ( strncmp ( next ,  " %instance " ,  9 )  = =  0 )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								len  + =  instance_len ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								format  + =  9 ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  else  if  ( strncmp ( next ,  " %shell " ,  6 )  = =  0 )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								len  + =  shell_len ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								format  + =  6 ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  else  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								+ + format ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								+ + len ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							next  =  strchr ( format ,  ' % ' ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						len  + =  strlen ( format ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						char  * buffer  =  calloc ( len  +  1 ,  1 ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( ! sway_assert ( buffer ,  " Unable to allocate title string " ) )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							return  NULL ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						// Now build the title
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						format  =  view - > title_format ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						next  =  strchr ( format ,  ' % ' ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						while  ( next )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							// Copy everything up to the %
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							strncat ( buffer ,  format ,  next  -  format ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							format  =  next ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							if  ( strncmp ( next ,  " %title " ,  6 )  = =  0 )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( title )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									strcat ( buffer ,  title ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								format  + =  6 ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  else  if  ( strncmp ( next ,  " %class " ,  6 )  = =  0 )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( class )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									strcat ( buffer ,  class ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								format  + =  6 ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  else  if  ( strncmp ( next ,  " %instance " ,  9 )  = =  0 )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( instance )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									strcat ( buffer ,  instance ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								format  + =  9 ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  else  if  ( strncmp ( next ,  " %shell " ,  6 )  = =  0 )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								strcat ( buffer ,  shell ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								format  + =  6 ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  else  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								strcat ( buffer ,  " % " ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								+ + format ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							next  =  strchr ( format ,  ' % ' ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						strcat ( buffer ,  format ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						return  buffer ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					void  view_update_title ( struct  sway_view  * view ,  bool  force )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( ! view - > swayc )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							return ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						const  char  * title  =  view_get_title ( view ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( ! force )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							if  ( title  & &  view - > swayc - > name  & &  strcmp ( title ,  view - > swayc - > name )  = =  0 )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								return ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							if  ( ! title  & &  ! view - > swayc - > name )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								return ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( title )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							if  ( view - > swayc - > name )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								free ( view - > swayc - > name ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							if  ( view - > swayc - > formatted_title )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								free ( view - > swayc - > formatted_title ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							view - > swayc - > name  =  strdup ( title ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							view - > swayc - > formatted_title  =  parse_title_format ( view ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}  else  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							free ( view - > swayc - > name ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							free ( view - > swayc - > formatted_title ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							view - > swayc - > name  =  NULL ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							view - > swayc - > formatted_title  =  NULL ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						container_calculate_title_height ( view - > swayc ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						container_update_title_textures ( view - > swayc ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						container_notify_child_title_changed ( view - > swayc - > parent ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						size_t  prev_max_height  =  config - > font_height ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						config_find_font_height ( false ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( config - > font_height  ! =  prev_max_height )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							arrange_root ( ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}