@ -100,7 +100,8 @@ static struct cmd_results *cmd_move_container(struct sway_container *current,
 
			
		
	
		
			
				
						// determine destination
 
 
			
		
	
		
			
				
						if  ( strcasecmp ( argv [ 1 ] ,  " workspace " )  = =  0 )  { 
 
			
		
	
		
			
				
							// move container to workspace x
 
 
			
		
	
		
			
				
							struct  sway_container  * ws ; 
 
			
		
	
		
			
				
							struct  sway_container  * ws  =  NULL ; 
 
			
		
	
		
			
				
							char  * ws_name  =  NULL ; 
 
			
		
	
		
			
				
							if  ( strcasecmp ( argv [ 2 ] ,  " next " )  = =  0  | | 
 
			
		
	
		
			
				
									strcasecmp ( argv [ 2 ] ,  " prev " )  = =  0  | | 
 
			
		
	
		
			
				
									strcasecmp ( argv [ 2 ] ,  " next_on_output " )  = =  0  | | 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -110,14 +111,13 @@ static struct cmd_results *cmd_move_container(struct sway_container *current,
 
			
		
	
		
			
				
							}  else  if  ( strcasecmp ( argv [ 2 ] ,  " back_and_forth " )  = =  0 )  { 
 
			
		
	
		
			
				
								if  ( ! ( ws  =  workspace_by_name ( argv [ 2 ] ) ) )  { 
 
			
		
	
		
			
				
									if  ( prev_workspace_name )  { 
 
			
		
	
		
			
				
										ws  =  workspace_create ( NULL ,   prev_workspace_name ) ; 
 
			
		
	
		
			
				
										ws _name =  strdup (  prev_workspace_name ) ; 
 
			
		
	
		
			
				
									}  else  { 
 
			
		
	
		
			
				
										return  cmd_results_new ( CMD_FAILURE ,  " move " , 
 
			
		
	
		
			
				
												" No workspace was previously active. " ) ; 
 
			
		
	
		
			
				
									} 
 
			
		
	
		
			
				
								} 
 
			
		
	
		
			
				
							}  else  { 
 
			
		
	
		
			
				
								char  * ws_name  =  NULL ; 
 
			
		
	
		
			
				
								if  ( strcasecmp ( argv [ 2 ] ,  " number " )  = =  0 )  { 
 
			
		
	
		
			
				
									// move "container to workspace number x"
 
 
			
		
	
		
			
				
									if  ( argc  <  4 )  { 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -141,12 +141,26 @@ static struct cmd_results *cmd_move_container(struct sway_container *current,
 
			
		
	
		
			
				
										ws  =  workspace_by_name ( ws_name ) ; 
 
			
		
	
		
			
				
									} 
 
			
		
	
		
			
				
								} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								if  ( ! ws )  { 
 
			
		
	
		
			
				
									ws  =  workspace_create ( NULL ,  ws_name ) ; 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
							if  ( ! ws )  { 
 
			
		
	
		
			
				
								// We have to create the workspace, but if the container is
 
 
			
		
	
		
			
				
								// sticky and the workspace is going to be created on the same
 
 
			
		
	
		
			
				
								// output, we'll bail out first.
 
 
			
		
	
		
			
				
								if  ( container_is_floating ( current )  & &  current - > is_sticky )  { 
 
			
		
	
		
			
				
									struct  sway_container  * old_output  = 
 
			
		
	
		
			
				
										container_parent ( current ,  C_OUTPUT ) ; 
 
			
		
	
		
			
				
									struct  sway_container  * new_output  = 
 
			
		
	
		
			
				
										workspace_get_initial_output ( ws_name ) ; 
 
			
		
	
		
			
				
									if  ( old_output  = =  new_output )  { 
 
			
		
	
		
			
				
										free ( ws_name ) ; 
 
			
		
	
		
			
				
										return  cmd_results_new ( CMD_FAILURE ,  " move " , 
 
			
		
	
		
			
				
												" Can't move sticky container to another workspace  " 
 
			
		
	
		
			
				
												" on the same output " ) ; 
 
			
		
	
		
			
				
									} 
 
			
		
	
		
			
				
								} 
 
			
		
	
		
			
				
								free ( ws_name ) ; 
 
			
		
	
		
			
				
								ws  =  workspace_create ( NULL ,  ws_name ) ; 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
							free ( ws_name ) ; 
 
			
		
	
		
			
				
							destination  =  seat_get_focus_inactive ( config - > handler_context . seat ,  ws ) ; 
 
			
		
	
		
			
				
						}  else  if  ( strcasecmp ( argv [ 1 ] ,  " output " )  = =  0 )  { 
 
			
		
	
		
			
				
							struct  sway_container  * source  =  container_parent ( current ,  C_OUTPUT ) ; 
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -173,6 +187,16 @@ static struct cmd_results *cmd_move_container(struct sway_container *current,
 
			
		
	
		
			
				
							return  cmd_results_new ( CMD_INVALID ,  " move " ,  expected_syntax ) ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						if  ( container_is_floating ( current )  & &  current - > is_sticky )  { 
 
			
		
	
		
			
				
							struct  sway_container  * old_output  =  container_parent ( current ,  C_OUTPUT ) ; 
 
			
		
	
		
			
				
							struct  sway_container  * new_output  =  destination - > type  = =  C_OUTPUT  ? 
 
			
		
	
		
			
				
								destination  :  container_parent ( destination ,  C_OUTPUT ) ; 
 
			
		
	
		
			
				
							if  ( old_output  = =  new_output )  { 
 
			
		
	
		
			
				
								return  cmd_results_new ( CMD_FAILURE ,  " move " ,  " Can't move sticky  " 
 
			
		
	
		
			
				
										" container to another workspace on the same output " ) ; 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						// move container, arrange windows and return focus
 
 
			
		
	
		
			
				
						container_move_to ( current ,  destination ) ; 
 
			
		
	
		
			
				
						struct  sway_container  * focus  =