mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	Fix moving to parallel container on another output
This commit is contained in:
		
							parent
							
								
									5ff16994c5
								
							
						
					
					
						commit
						9109b1fd11
					
				
					 1 changed files with 4 additions and 7 deletions
				
			
		| 
						 | 
					@ -244,10 +244,7 @@ static int move_offs(enum movement_direction move_dir) {
 | 
				
			||||||
/* Gets the index of the most extreme member based on the movement offset */
 | 
					/* Gets the index of the most extreme member based on the movement offset */
 | 
				
			||||||
static int container_limit(struct sway_container *container,
 | 
					static int container_limit(struct sway_container *container,
 | 
				
			||||||
		enum movement_direction move_dir) {
 | 
							enum movement_direction move_dir) {
 | 
				
			||||||
	if (container->children->length == 0) {
 | 
						return move_offs(move_dir) < 0 ? 0 : container->children->length;
 | 
				
			||||||
		return 0;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return move_offs(move_dir) < 0 ? 0 : container->children->length - 1;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Takes one child, sets it aside, wraps the rest of the children in a new
 | 
					/* Takes one child, sets it aside, wraps the rest of the children in a new
 | 
				
			||||||
| 
						 | 
					@ -306,7 +303,6 @@ void container_move(struct sway_container *container,
 | 
				
			||||||
				container_type_to_str(current->type), current->name);
 | 
									container_type_to_str(current->type), current->name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		int index = index_child(current);
 | 
							int index = index_child(current);
 | 
				
			||||||
		int limit = container_limit(parent, move_dir);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		switch (current->type) {
 | 
							switch (current->type) {
 | 
				
			||||||
		case C_OUTPUT: {
 | 
							case C_OUTPUT: {
 | 
				
			||||||
| 
						 | 
					@ -350,7 +346,8 @@ void container_move(struct sway_container *container,
 | 
				
			||||||
		case C_CONTAINER:
 | 
							case C_CONTAINER:
 | 
				
			||||||
		case C_VIEW:
 | 
							case C_VIEW:
 | 
				
			||||||
			if (is_parallel(parent->layout, move_dir)) {
 | 
								if (is_parallel(parent->layout, move_dir)) {
 | 
				
			||||||
				if (index == limit) {
 | 
									if ((index == parent->children->length - 1 && offs > 0)
 | 
				
			||||||
 | 
											|| (index == 0 && offs < 0)) {
 | 
				
			||||||
					if (current->parent == container->parent) {
 | 
										if (current->parent == container->parent) {
 | 
				
			||||||
						wlr_log(L_DEBUG, "Hit limit, selecting parent");
 | 
											wlr_log(L_DEBUG, "Hit limit, selecting parent");
 | 
				
			||||||
						current = current->parent;
 | 
											current = current->parent;
 | 
				
			||||||
| 
						 | 
					@ -408,7 +405,7 @@ void container_move(struct sway_container *container,
 | 
				
			||||||
		case C_CONTAINER:
 | 
							case C_CONTAINER:
 | 
				
			||||||
			if (is_parallel(sibling->layout, move_dir)) {
 | 
								if (is_parallel(sibling->layout, move_dir)) {
 | 
				
			||||||
				int limit = container_limit(sibling, invert_movement(move_dir));
 | 
									int limit = container_limit(sibling, invert_movement(move_dir));
 | 
				
			||||||
				limit = limit != 0 ? limit + 1 : limit; // Convert to index
 | 
									wlr_log(L_DEBUG, "limit: %d", limit);
 | 
				
			||||||
				wlr_log(L_DEBUG,
 | 
									wlr_log(L_DEBUG,
 | 
				
			||||||
						"Reparenting container (parallel) to index %d "
 | 
											"Reparenting container (parallel) to index %d "
 | 
				
			||||||
						"(move dir: %d)", limit, move_dir);
 | 
											"(move dir: %d)", limit, move_dir);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue