Bugfix: Don’t move floating windows when their size constraints forbid resizing (Thanks aksr)

fixes #883
This commit is contained in:
Michael Stapelberg 2012-11-27 09:26:31 +01:00
parent 19cbd3cbec
commit 1ae08b196a
2 changed files with 20 additions and 2 deletions

View File

@ -576,19 +576,30 @@ void cmd_move_con_to_workspace_number(I3_CMD, char *which) {
static void cmd_resize_floating(I3_CMD, char *way, char *direction, Con *floating_con, int px) { static void cmd_resize_floating(I3_CMD, char *way, char *direction, Con *floating_con, int px) {
LOG("floating resize\n"); LOG("floating resize\n");
Rect old_rect = floating_con->rect;
if (strcmp(direction, "up") == 0) { if (strcmp(direction, "up") == 0) {
floating_con->rect.y -= px;
floating_con->rect.height += px; floating_con->rect.height += px;
} else if (strcmp(direction, "down") == 0 || strcmp(direction, "height") == 0) { } else if (strcmp(direction, "down") == 0 || strcmp(direction, "height") == 0) {
floating_con->rect.height += px; floating_con->rect.height += px;
} else if (strcmp(direction, "left") == 0) { } else if (strcmp(direction, "left") == 0) {
floating_con->rect.x -= px;
floating_con->rect.width += px; floating_con->rect.width += px;
} else { } else {
floating_con->rect.width += px; floating_con->rect.width += px;
} }
floating_check_size(floating_con); 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) { static bool cmd_resize_tiling_direction(I3_CMD, Con *current, char *way, char *direction, int ppt) {

View File

@ -174,6 +174,13 @@ $rect = $window->rect;
is($rect->{width}, 100, 'width = 100'); is($rect->{width}, 100, 'width = 100');
is($rect->{height}, 100, 'height = 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); exit_gracefully($pid);
done_testing; done_testing;