static void cmd_resize_floating(I3_CMD, char *way, char *direction, Con *floating_con, int px) {
LOG("floating resize\n");
+ Rect old_rect = floating_con->rect;
+
if (strcmp(direction, "up") == 0) {
- floating_con->rect.y -= px;
floating_con->rect.height += px;
} else if (strcmp(direction, "down") == 0 || strcmp(direction, "height") == 0) {
floating_con->rect.height += px;
} else if (strcmp(direction, "left") == 0) {
- floating_con->rect.x -= px;
floating_con->rect.width += px;
} else {
floating_con->rect.width += px;
}
floating_check_size(floating_con);
+
+ /* Did we actually resize anything or did the size constraints prevent us?
+ * If we could not resize, exit now to not move the window. */
+ if (memcmp(&old_rect, &(floating_con->rect), sizeof(Rect)) == 0)
+ return;
+
+ if (strcmp(direction, "up") == 0) {
+ floating_con->rect.y -= px;
+ } else if (strcmp(direction, "left") == 0) {
+ floating_con->rect.x -= px;
+ }
}
static bool cmd_resize_tiling_direction(I3_CMD, Con *current, char *way, char *direction, int ppt) {
is($rect->{width}, 100, 'width = 100');
is($rect->{height}, 100, 'height = 100');
+my $old_x = $rect->{x};
+my $old_y = $rect->{y};
+cmd 'resize grow up 10px or 10ppt';
+$rect = $window->rect;
+is($rect->{x}, $old_x, 'window did not move when trying to resize');
+is($rect->{y}, $old_y, 'window did not move when trying to resize');
+
exit_gracefully($pid);
done_testing;