mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	Merge pull request #2729 from RyanDwyer/resize-return-false
Return an error when resizing is a no op
This commit is contained in:
		
						commit
						351e722b6e
					
				
					 2 changed files with 20 additions and 12 deletions
				
			
		| 
						 | 
					@ -95,7 +95,7 @@ struct cmd_results *add_color(const char *name,
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * TODO: Move this function and its dependent functions to container.c.
 | 
					 * TODO: Move this function and its dependent functions to container.c.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void container_resize_tiled(struct sway_container *parent, enum wlr_edges edge,
 | 
					bool container_resize_tiled(struct sway_container *parent, enum wlr_edges edge,
 | 
				
			||||||
		int amount);
 | 
							int amount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sway_cmd cmd_assign;
 | 
					sway_cmd cmd_assign;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -179,11 +179,11 @@ static void container_recursive_resize(struct sway_container *container,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void resize_tiled(struct sway_container *parent, int amount,
 | 
					static bool resize_tiled(struct sway_container *parent, int amount,
 | 
				
			||||||
		enum resize_axis axis) {
 | 
							enum resize_axis axis) {
 | 
				
			||||||
	struct sway_container *focused = parent;
 | 
						struct sway_container *focused = parent;
 | 
				
			||||||
	if (!parent) {
 | 
						if (!parent) {
 | 
				
			||||||
		return;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	enum sway_container_layout parallel_layout =
 | 
						enum sway_container_layout parallel_layout =
 | 
				
			||||||
| 
						 | 
					@ -216,7 +216,7 @@ static void resize_tiled(struct sway_container *parent, int amount,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (!parent) {
 | 
						if (!parent) {
 | 
				
			||||||
		// Can't resize in this direction
 | 
							// Can't resize in this direction
 | 
				
			||||||
		return;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Implement up/down/left/right direction by zeroing one of the weights,
 | 
						// Implement up/down/left/right direction by zeroing one of the weights,
 | 
				
			||||||
| 
						 | 
					@ -248,22 +248,22 @@ static void resize_tiled(struct sway_container *parent, int amount,
 | 
				
			||||||
			if (sibling_pos < parent_pos && minor_weight) {
 | 
								if (sibling_pos < parent_pos && minor_weight) {
 | 
				
			||||||
				double pixels = -amount / minor_weight;
 | 
									double pixels = -amount / minor_weight;
 | 
				
			||||||
				if (major_weight && (sibling_size + pixels / 2) < min_sane) {
 | 
									if (major_weight && (sibling_size + pixels / 2) < min_sane) {
 | 
				
			||||||
					return; // Too small
 | 
										return false; // Too small
 | 
				
			||||||
				} else if (!major_weight && sibling_size + pixels < min_sane) {
 | 
									} else if (!major_weight && sibling_size + pixels < min_sane) {
 | 
				
			||||||
					return; // Too small
 | 
										return false; // Too small
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			} else if (sibling_pos > parent_pos && major_weight) {
 | 
								} else if (sibling_pos > parent_pos && major_weight) {
 | 
				
			||||||
				double pixels = -amount / major_weight;
 | 
									double pixels = -amount / major_weight;
 | 
				
			||||||
				if (minor_weight && (sibling_size + pixels / 2) < min_sane) {
 | 
									if (minor_weight && (sibling_size + pixels / 2) < min_sane) {
 | 
				
			||||||
					return; // Too small
 | 
										return false; // Too small
 | 
				
			||||||
				} else if (!minor_weight && sibling_size + pixels < min_sane) {
 | 
									} else if (!minor_weight && sibling_size + pixels < min_sane) {
 | 
				
			||||||
					return; // Too small
 | 
										return false; // Too small
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			double pixels = amount;
 | 
								double pixels = amount;
 | 
				
			||||||
			if (parent_size + pixels < min_sane) {
 | 
								if (parent_size + pixels < min_sane) {
 | 
				
			||||||
				return; // Too small
 | 
									return false; // Too small
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -317,9 +317,10 @@ static void resize_tiled(struct sway_container *parent, int amount,
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		arrange_workspace(parent->workspace);
 | 
							arrange_workspace(parent->workspace);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void container_resize_tiled(struct sway_container *parent,
 | 
					bool container_resize_tiled(struct sway_container *parent,
 | 
				
			||||||
		enum wlr_edges edge, int amount) {
 | 
							enum wlr_edges edge, int amount) {
 | 
				
			||||||
	enum resize_axis axis = RESIZE_AXIS_INVALID;
 | 
						enum resize_axis axis = RESIZE_AXIS_INVALID;
 | 
				
			||||||
	switch (edge) {
 | 
						switch (edge) {
 | 
				
			||||||
| 
						 | 
					@ -338,7 +339,7 @@ void container_resize_tiled(struct sway_container *parent,
 | 
				
			||||||
	case WLR_EDGE_NONE:
 | 
						case WLR_EDGE_NONE:
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	resize_tiled(parent, amount, axis);
 | 
						return resize_tiled(parent, amount, axis);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -395,6 +396,10 @@ static struct cmd_results *resize_adjust_floating(enum resize_axis axis,
 | 
				
			||||||
	case RESIZE_AXIS_INVALID:
 | 
						case RESIZE_AXIS_INVALID:
 | 
				
			||||||
		return cmd_results_new(CMD_INVALID, "resize", "Invalid axis/direction");
 | 
							return cmd_results_new(CMD_INVALID, "resize", "Invalid axis/direction");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if (grow_x == 0 && grow_y == 0) {
 | 
				
			||||||
 | 
							return cmd_results_new(CMD_INVALID, "resize",
 | 
				
			||||||
 | 
									"Cannot resize any further");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	con->x += grow_x;
 | 
						con->x += grow_x;
 | 
				
			||||||
	con->y += grow_y;
 | 
						con->y += grow_y;
 | 
				
			||||||
	con->width += grow_width;
 | 
						con->width += grow_width;
 | 
				
			||||||
| 
						 | 
					@ -442,7 +447,10 @@ static struct cmd_results *resize_adjust_tiled(enum resize_axis axis,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	resize_tiled(current, amount->amount, axis);
 | 
						if (!resize_tiled(current, amount->amount, axis)) {
 | 
				
			||||||
 | 
							return cmd_results_new(CMD_INVALID, "resize",
 | 
				
			||||||
 | 
									"Cannot resize any further");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return cmd_results_new(CMD_SUCCESS, NULL, NULL);
 | 
						return cmd_results_new(CMD_SUCCESS, NULL, NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue