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;
 | 
						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
 | 
					// Returns true if moved
 | 
				
			||||||
static bool container_move_in_direction(struct sway_container *container,
 | 
					static bool container_move_in_direction(struct sway_container *container,
 | 
				
			||||||
		enum movement_direction move_dir) {
 | 
							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;
 | 
						int offs = move_dir == MOVE_LEFT || move_dir == MOVE_UP ? -1 : 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while (current) {
 | 
						while (current) {
 | 
				
			||||||
		struct sway_container *parent = current->parent;
 | 
					 | 
				
			||||||
		list_t *siblings = container_get_siblings(current);
 | 
							list_t *siblings = container_get_siblings(current);
 | 
				
			||||||
		enum sway_container_layout layout = container_parent_layout(current);
 | 
							enum sway_container_layout layout = container_parent_layout(current);
 | 
				
			||||||
		int index = list_find(siblings, 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 (is_parallel(layout, move_dir)) {
 | 
				
			||||||
			if (desired == -1 || desired == siblings->length) {
 | 
								if (desired == -1 || desired == siblings->length) {
 | 
				
			||||||
				if (current->parent == container->parent) {
 | 
									if (current->parent == container->parent) {
 | 
				
			||||||
					if (!(parent && parent->is_fullscreen) &&
 | 
										current = current->parent;
 | 
				
			||||||
							(layout == L_TABBED || layout == L_STACKED)) {
 | 
										continue;
 | 
				
			||||||
						move_out_of_tabs_stacks(container, current,
 | 
					 | 
				
			||||||
								move_dir, offs);
 | 
					 | 
				
			||||||
						return true;
 | 
					 | 
				
			||||||
					} else {
 | 
					 | 
				
			||||||
						current = current->parent;
 | 
					 | 
				
			||||||
						continue;
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					// Special case
 | 
										// Special case
 | 
				
			||||||
					if (current->parent) {
 | 
										if (current->parent) {
 | 
				
			||||||
| 
						 | 
					@ -369,10 +328,6 @@ static bool container_move_in_direction(struct sway_container *container,
 | 
				
			||||||
						siblings->items[desired], move_dir);
 | 
											siblings->items[desired], move_dir);
 | 
				
			||||||
				return true;
 | 
									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;
 | 
							current = current->parent;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue