@ -251,9 +251,10 @@ shell_fade_startup(struct desktop_shell *shell); 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  struct  shell_seat  *  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					get_shell_seat ( struct  weston_seat  * seat ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  int  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					get_output_panel_height ( struct  desktop_shell  * shell ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								struct  weston_output  * output ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					get_output_panel_size ( struct  desktop_shell  * shell ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							      struct  weston_output  * output ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							      int  * width ,  int  * height ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					shell_surface_update_child_surface_layers ( struct  shell_surface  * shsurf ) ;  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -351,24 +352,85 @@ shell_grab_start(struct shell_grab *grab, 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  int  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					get_output_panel_height ( struct  desktop_shell  * shell ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								struct  weston_output  * output )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					get_output_panel_size ( struct  desktop_shell  * shell ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							      struct  weston_output  * output ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							      int  * width ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							      int  * height )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  weston_view  * view ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						int  panel_height  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						* width  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						* height  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( ! output )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							return  0  ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							return ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						wl_list_for_each ( view ,  & shell - > panel_layer . view_list . link ,  layer_link . link )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							if  ( view - > surface - > output  = =  output )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								panel_height  =  view - > surface - > height ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							float  x ,  y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							if  ( view - > surface - > output  ! =  output )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								continue ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							switch  ( shell - > panel_position )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							case  DESKTOP_SHELL_PANEL_POSITION_TOP :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							case  DESKTOP_SHELL_PANEL_POSITION_BOTTOM :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								weston_view_to_global_float ( view ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
											    view - > surface - > width ,  0 ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
											    & x ,  & y ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								* width  =  ( int )  x ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								* height  =  view - > surface - > height  +  ( int )  y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								return ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							case  DESKTOP_SHELL_PANEL_POSITION_LEFT :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							case  DESKTOP_SHELL_PANEL_POSITION_RIGHT :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								weston_view_to_global_float ( view ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
											    0 ,  view - > surface - > height ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
											    & x ,  & y ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								* width  =  view - > surface - > width  +  ( int )  x ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								* height  =  ( int )  y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								return ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							default :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								/* we've already set width and height to
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								 *  fallback  values .  */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						return  panel_height ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						/* the correct view wasn't found */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					get_output_work_area ( struct  desktop_shell  * shell ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							     struct  weston_output  * output ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							     pixman_rectangle32_t  * area )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						int32_t  panel_width  =  0 ,  panel_height  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						area - > x  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						area - > y  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						get_output_panel_size ( shell ,  output ,  & panel_width ,  & panel_height ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						switch  ( shell - > panel_position )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						case  DESKTOP_SHELL_PANEL_POSITION_TOP :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						default :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							area - > y  =  panel_height ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						case  DESKTOP_SHELL_PANEL_POSITION_BOTTOM :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							area - > width  =  output - > width ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							area - > height  =  output - > height  -  panel_height ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						case  DESKTOP_SHELL_PANEL_POSITION_LEFT :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							area - > x  =  panel_width ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						case  DESKTOP_SHELL_PANEL_POSITION_RIGHT :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							area - > width  =  output - > width  -  panel_width ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							area - > height  =  output - > height ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  void  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -389,13 +451,13 @@ send_configure_for_surface(struct shell_surface *shsurf) 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							height  =  shsurf - > output - > height ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}  else  if  ( state - > maximized )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							struct  desktop_shell  * shell ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							uint32_t  panel_height  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							pixman_rectangle32_t  area ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							shell  =  shell_surface_get_shell ( shsurf ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							panel_height  =  get_output_panel_height ( shell ,  shsurf - > output ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							get_output_work_area ( shell ,  shsurf - > output ,  & area ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							width  =  shsurf - > output - > width ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							height  =  shsurf - > output - > height  -  panel_ height;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							width  =  area . width ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							height  =  area . height ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}  else  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							width  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							height  =  0 ;   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -1550,20 +1612,25 @@ constrain_position(struct weston_move_grab *move, int *cx, int *cy) 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  shell_surface  * shsurf  =  move - > base . shsurf ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  weston_pointer  * pointer  =  move - > base . grab . pointer ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						int  x ,  y ,  panel_height ,  bottom ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						int  x ,  y ,  panel_width ,  panel_ height ,  bottom ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						const  int  safety  =  50 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						x  =  wl_fixed_to_int ( pointer - > x  +  move - > dx ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						y  =  wl_fixed_to_int ( pointer - > y  +  move - > dy ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						panel_height  =  get_output_panel_height ( shsurf - > shell ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										       shsurf - > surface - > output ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						bottom  =  y  +  shsurf - > geometry . height ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( bottom  -  panel_height  <  safety )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							y  =  panel_height  +  safety  -  shsurf - > geometry . height ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( shsurf - > shell - > panel_position  = =  DESKTOP_SHELL_PANEL_POSITION_TOP )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							get_output_panel_size ( shsurf - > shell ,  shsurf - > surface - > output ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									      & panel_width ,  & panel_height ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( move - > client_initiated  & &  y  +  shsurf - > geometry . y  <  panel_height )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							y  =  panel_height  -  shsurf - > geometry . y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							bottom  =  y  +  shsurf - > geometry . height ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							if  ( bottom  -  panel_height  <  safety )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								y  =  panel_height  +  safety  -   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									shsurf - > geometry . height ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							if  ( move - > client_initiated  & &   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							    y  +  shsurf - > geometry . y  <  panel_height )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								y  =  panel_height  -  shsurf - > geometry . y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						* cx  =  x ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						* cy  =  y ;   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -4974,10 +5041,11 @@ weston_view_set_initial_position(struct weston_view *view, 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  weston_compositor  * compositor  =  shell - > compositor ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						int  ix  =  0 ,  iy  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						int  range_x ,  range_y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						int  dx ,  dy ,  x ,  y ,  panel_height ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						int32_t   range_x ,  range_y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						int32_t   dx ,  dy ,  x ,  y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  weston_output  * output ,  * target_output  =  NULL ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  weston_seat  * seat ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						pixman_rectangle32_t  area ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						/* As a heuristic place the new window on the same output as the
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						 *  pointer .  Falling  back  to  the  output  containing  0 ,  0.   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -5009,20 +5077,18 @@ weston_view_set_initial_position(struct weston_view *view, 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						 *  If  this  is  negative  it  means  that  the  surface  is  bigger  than   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						 *  output .   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						 */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						panel_height  =  get_output_panel_height ( shell ,  target_output ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						range_x  =  target_output - > width  -  view - > surface - > width ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						range_y  =  ( target_output - > height  -  panel_height )  -   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							  view - > surface - > height ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						get_output_work_area ( shell ,  target_output ,  & area ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						dx  =  area . x ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						dy  =  area . y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						range_x  =  area . width  -  view - > surface - > width ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						range_y  =  area . height  -  view - > surface - > height ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( range_x  >  0 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							dx  =  random ( )  %  range_x ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						else   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							dx  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							dx  + =  random ( )  %  range_x ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( range_y  >  0 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							dy  =  panel_height  +  random ( )  %  range_y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						else   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							dy  =  panel_height ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							dy  + =  random ( )  %  range_y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						x  =  target_output - > x  +  dx ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						y  =  target_output - > y  +  dy ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -5030,14 +5096,29 @@ weston_view_set_initial_position(struct weston_view *view, 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						weston_view_set_position ( view ,  x ,  y ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					set_maximized_position ( struct  desktop_shell  * shell ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							       struct  shell_surface  * shsurf )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						int32_t  surf_x ,  surf_y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						pixman_rectangle32_t  area ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						/* use surface configure to set the geometry */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						get_output_work_area ( shell ,  shsurf - > output ,  & area ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						surface_subsurfaces_boundingbox ( shsurf - > surface ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										& surf_x ,  & surf_y ,  NULL ,  NULL ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						weston_view_set_position ( shsurf - > view ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									 area . x  -  surf_x ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									 area . y  -  surf_y ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					map ( struct  desktop_shell  * shell ,  struct  shell_surface  * shsurf ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    int32_t  sx ,  int32_t  sy )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  weston_compositor  * compositor  =  shell - > compositor ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  weston_seat  * seat ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						int  panel_height  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						int32_t  surf_x ,  surf_y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						/* initial positioning, see also configure() */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						switch  ( shsurf - > type )  {   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -5046,14 +5127,7 @@ map(struct desktop_shell *shell, struct shell_surface *shsurf, 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								center_on_output ( shsurf - > view ,  shsurf - > fullscreen_output ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								shell_map_fullscreen ( shsurf ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  else  if  ( shsurf - > state . maximized )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								/* use surface configure to set the geometry */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								panel_height  =  get_output_panel_height ( shell ,  shsurf - > output ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								surface_subsurfaces_boundingbox ( shsurf - > surface ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
												& surf_x ,  & surf_y ,  NULL ,  NULL ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								weston_view_set_position ( shsurf - > view ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
											 shsurf - > output - > x  -  surf_x ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
											 shsurf - > output - > y  +   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
											 panel_height  -  surf_y ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								set_maximized_position ( shell ,  shsurf ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  else  if  ( ! shsurf - > state . relative )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								weston_view_set_initial_position ( shsurf - > view ,  shell ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -5126,7 +5200,6 @@ configure(struct desktop_shell *shell, struct weston_surface *surface, 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  shell_surface  * shsurf ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  weston_view  * view ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						int32_t  mx ,  my ,  surf_x ,  surf_y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						shsurf  =  get_shell_surface ( surface ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -5135,13 +5208,7 @@ configure(struct desktop_shell *shell, struct weston_surface *surface, 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( shsurf - > state . fullscreen )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							shell_configure_fullscreen ( shsurf ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						else  if  ( shsurf - > state . maximized )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							/* setting x, y and using configure to change that geometry */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							surface_subsurfaces_boundingbox ( shsurf - > surface ,  & surf_x ,  & surf_y ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							                                                 NULL ,  NULL ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							mx  =  shsurf - > output - > x  -  surf_x ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							my  =  shsurf - > output - > y  +   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							     get_output_panel_height ( shell , shsurf - > output )  -  surf_y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							weston_view_set_position ( shsurf - > view ,  mx ,  my ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							set_maximized_position ( shell ,  shsurf ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}  else  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							weston_view_set_position ( shsurf - > view ,  x ,  y ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}