aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Dwyer <ryandwyer1@gmail.com>2018-10-09 22:25:21 +1000
committerRyan Dwyer <ryandwyer1@gmail.com>2018-10-09 22:25:21 +1000
commit61699a11463d5a1168358ba5f7fece6401ab0654 (patch)
tree3f597e3a0534927e532597a6e2b5ddc59d1c0cfd
parente143c9613d350b74e02c5ac3c9a055ab26fc9588 (diff)
resize: Determine if anything changed using before/after check
Returning a boolean from container_resize_tiled and resize_tiled doesn't work in all cases. This patch changes it back to void and does a before/after check to see if the container was resized.
-rw-r--r--include/sway/commands.h2
-rw-r--r--sway/commands/resize.c26
2 files changed, 15 insertions, 13 deletions
diff --git a/include/sway/commands.h b/include/sway/commands.h
index 48228a98..ab2da1a9 100644
--- a/include/sway/commands.h
+++ b/include/sway/commands.h
@@ -95,7 +95,7 @@ struct cmd_results *add_color(const char *name,
/**
* TODO: Move this function and its dependent functions to container.c.
*/
-bool container_resize_tiled(struct sway_container *parent, enum wlr_edges edge,
+void container_resize_tiled(struct sway_container *parent, enum wlr_edges edge,
int amount);
sway_cmd cmd_assign;
diff --git a/sway/commands/resize.c b/sway/commands/resize.c
index 1343b165..6de14ca3 100644
--- a/sway/commands/resize.c
+++ b/sway/commands/resize.c
@@ -179,11 +179,11 @@ static void container_recursive_resize(struct sway_container *container,
}
}
-static bool resize_tiled(struct sway_container *parent, int amount,
+static void resize_tiled(struct sway_container *parent, int amount,
enum resize_axis axis) {
struct sway_container *focused = parent;
if (!parent) {
- return false;
+ return;
}
enum sway_container_layout parallel_layout =
@@ -216,7 +216,7 @@ static bool resize_tiled(struct sway_container *parent, int amount,
}
if (!parent) {
// Can't resize in this direction
- return false;
+ return;
}
// Implement up/down/left/right direction by zeroing one of the weights,
@@ -248,22 +248,22 @@ static bool resize_tiled(struct sway_container *parent, int amount,
if (sibling_pos < parent_pos && minor_weight) {
double pixels = -amount / minor_weight;
if (major_weight && (sibling_size + pixels / 2) < min_sane) {
- return false; // Too small
+ return; // Too small
} else if (!major_weight && sibling_size + pixels < min_sane) {
- return false; // Too small
+ return; // Too small
}
} else if (sibling_pos > parent_pos && major_weight) {
double pixels = -amount / major_weight;
if (minor_weight && (sibling_size + pixels / 2) < min_sane) {
- return false; // Too small
+ return; // Too small
} else if (!minor_weight && sibling_size + pixels < min_sane) {
- return false; // Too small
+ return; // Too small
}
}
} else {
double pixels = amount;
if (parent_size + pixels < min_sane) {
- return false; // Too small
+ return; // Too small
}
}
}
@@ -317,10 +317,9 @@ static bool resize_tiled(struct sway_container *parent, int amount,
} else {
arrange_workspace(parent->workspace);
}
- return true;
}
-bool container_resize_tiled(struct sway_container *parent,
+void container_resize_tiled(struct sway_container *parent,
enum wlr_edges edge, int amount) {
enum resize_axis axis = RESIZE_AXIS_INVALID;
switch (edge) {
@@ -339,7 +338,7 @@ bool container_resize_tiled(struct sway_container *parent,
case WLR_EDGE_NONE:
break;
}
- return resize_tiled(parent, amount, axis);
+ resize_tiled(parent, amount, axis);
}
/**
@@ -447,7 +446,10 @@ static struct cmd_results *resize_adjust_tiled(enum resize_axis axis,
}
}
- if (!resize_tiled(current, amount->amount, axis)) {
+ double old_width = current->width;
+ double old_height = current->height;
+ resize_tiled(current, amount->amount, axis);
+ if (current->width == old_width && current->height == old_height) {
return cmd_results_new(CMD_INVALID, "resize",
"Cannot resize any further");
}