mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	Remove move_out_of_tabs_stacks
This fixes the following. Create these layouts and run move right: (Initial layout -> expected result -> actual result) * `H[S[unfocused focused] unfocused]` -> `H[S[unfocused] focused unfocused]` -> `H[H[S[unfocused] focused] unfocused]` * `H[S[unfocused focused] V[unfocused]]` -> `H[S[unfocused] V[unfocused focused]]` -> `H[H[S[unfocused] focused] V[unfocused]]` move_out_of_tabs_stacks was originally made to allow views to move out of the tabbed/stacked container in the parallel direction, but at some point this has started working using the regular logic.
This commit is contained in:
		
							parent
							
								
									68395f34f6
								
							
						
					
					
						commit
						93624599b3
					
				
					 1 changed files with 2 additions and 47 deletions
				
			
		| 
						 | 
				
			
			@ -270,39 +270,6 @@ static void workspace_rejigger(struct sway_workspace *ws,
 | 
			
		|||
	child->width = child->height = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void move_out_of_tabs_stacks(struct sway_container *container,
 | 
			
		||||
		struct sway_container *current, enum movement_direction move_dir,
 | 
			
		||||
		int offs) {
 | 
			
		||||
	enum sway_container_layout layout = move_dir ==
 | 
			
		||||
		MOVE_LEFT || move_dir == MOVE_RIGHT ? L_HORIZ : L_VERT;
 | 
			
		||||
	list_t *siblings = container_get_siblings(container);
 | 
			
		||||
	if (container == current && siblings->length == 1) {
 | 
			
		||||
		wlr_log(WLR_DEBUG, "Changing layout of parent");
 | 
			
		||||
		if (container->parent) {
 | 
			
		||||
			container->parent->layout = layout;
 | 
			
		||||
			container_update_representation(container);
 | 
			
		||||
		} else {
 | 
			
		||||
			container->workspace->layout = layout;
 | 
			
		||||
			workspace_update_representation(container->workspace);
 | 
			
		||||
		}
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	wlr_log(WLR_DEBUG, "Moving out of tab/stack into a split");
 | 
			
		||||
	if (current->parent) {
 | 
			
		||||
		struct sway_container *new_parent =
 | 
			
		||||
			container_split(current->parent, layout);
 | 
			
		||||
		container_insert_child(new_parent, container, offs < 0 ? 0 : 1);
 | 
			
		||||
		container_reap_empty(new_parent);
 | 
			
		||||
		container_flatten(new_parent);
 | 
			
		||||
	} else {
 | 
			
		||||
		// Changing a workspace
 | 
			
		||||
		struct sway_workspace *workspace = container->workspace;
 | 
			
		||||
		workspace_split(workspace, layout);
 | 
			
		||||
		workspace_insert_tiling(workspace, container, offs < 0 ? 0 : 1);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns true if moved
 | 
			
		||||
static bool container_move_in_direction(struct sway_container *container,
 | 
			
		||||
		enum movement_direction move_dir) {
 | 
			
		||||
| 
						 | 
				
			
			@ -334,7 +301,6 @@ static bool container_move_in_direction(struct sway_container *container,
 | 
			
		|||
	int offs = move_dir == MOVE_LEFT || move_dir == MOVE_UP ? -1 : 1;
 | 
			
		||||
 | 
			
		||||
	while (current) {
 | 
			
		||||
		struct sway_container *parent = current->parent;
 | 
			
		||||
		list_t *siblings = container_get_siblings(current);
 | 
			
		||||
		enum sway_container_layout layout = container_parent_layout(current);
 | 
			
		||||
		int index = list_find(siblings, current);
 | 
			
		||||
| 
						 | 
				
			
			@ -343,15 +309,8 @@ static bool container_move_in_direction(struct sway_container *container,
 | 
			
		|||
		if (is_parallel(layout, move_dir)) {
 | 
			
		||||
			if (desired == -1 || desired == siblings->length) {
 | 
			
		||||
				if (current->parent == container->parent) {
 | 
			
		||||
					if (!(parent && parent->is_fullscreen) &&
 | 
			
		||||
							(layout == L_TABBED || layout == L_STACKED)) {
 | 
			
		||||
						move_out_of_tabs_stacks(container, current,
 | 
			
		||||
								move_dir, offs);
 | 
			
		||||
						return true;
 | 
			
		||||
					} else {
 | 
			
		||||
					current = current->parent;
 | 
			
		||||
					continue;
 | 
			
		||||
					}
 | 
			
		||||
				} else {
 | 
			
		||||
					// Special case
 | 
			
		||||
					if (current->parent) {
 | 
			
		||||
| 
						 | 
				
			
			@ -369,10 +328,6 @@ static bool container_move_in_direction(struct sway_container *container,
 | 
			
		|||
						siblings->items[desired], move_dir);
 | 
			
		||||
				return true;
 | 
			
		||||
			}
 | 
			
		||||
		} else if (!(parent && parent->is_fullscreen) &&
 | 
			
		||||
				(layout == L_TABBED || layout == L_STACKED)) {
 | 
			
		||||
			move_out_of_tabs_stacks(container, current, move_dir, offs);
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		current = current->parent;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue