Bugfix: Don’t move floating windows when their size constraints forbid resizing (Thanks aksr)
fixes #883
This commit is contained in:
parent
19cbd3cbec
commit
1ae08b196a
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue