parent
2252b4f5b9
commit
66b389cba1
|
@ -575,10 +575,9 @@ static void cmd_resize_floating(I3_CMD, char *way, char *direction, Con *floatin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool cmd_resize_tiling_direction(I3_CMD, char *way, char *direction, int ppt) {
|
static bool cmd_resize_tiling_direction(I3_CMD, Con *current, char *way, char *direction, int ppt) {
|
||||||
LOG("tiling resize\n");
|
LOG("tiling resize\n");
|
||||||
/* get the appropriate current container (skip stacked/tabbed cons) */
|
/* get the appropriate current container (skip stacked/tabbed cons) */
|
||||||
Con *current = focused;
|
|
||||||
Con *other = NULL;
|
Con *other = NULL;
|
||||||
double percentage = 0;
|
double percentage = 0;
|
||||||
while (current->parent->layout == L_STACKED ||
|
while (current->parent->layout == L_STACKED ||
|
||||||
|
@ -658,10 +657,9 @@ static bool cmd_resize_tiling_direction(I3_CMD, char *way, char *direction, int
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool cmd_resize_tiling_width_height(I3_CMD, char *way, char *direction, int ppt) {
|
static bool cmd_resize_tiling_width_height(I3_CMD, Con *current, char *way, char *direction, int ppt) {
|
||||||
LOG("width/height resize\n");
|
LOG("width/height resize\n");
|
||||||
/* get the appropriate current container (skip stacked/tabbed cons) */
|
/* get the appropriate current container (skip stacked/tabbed cons) */
|
||||||
Con *current = focused;
|
|
||||||
while (current->parent->layout == L_STACKED ||
|
while (current->parent->layout == L_STACKED ||
|
||||||
current->parent->layout == L_TABBED)
|
current->parent->layout == L_TABBED)
|
||||||
current = current->parent;
|
current = current->parent;
|
||||||
|
@ -756,17 +754,22 @@ void cmd_resize(I3_CMD, char *way, char *direction, char *resize_px, char *resiz
|
||||||
ppt *= -1;
|
ppt *= -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Con *floating_con;
|
HANDLE_EMPTY_MATCH;
|
||||||
if ((floating_con = con_inside_floating(focused))) {
|
|
||||||
cmd_resize_floating(current_match, cmd_output, way, direction, floating_con, px);
|
owindow *current;
|
||||||
} else {
|
TAILQ_FOREACH(current, &owindows, owindows) {
|
||||||
if (strcmp(direction, "width") == 0 ||
|
Con *floating_con;
|
||||||
strcmp(direction, "height") == 0) {
|
if ((floating_con = con_inside_floating(current->con))) {
|
||||||
if (!cmd_resize_tiling_width_height(current_match, cmd_output, way, direction, ppt))
|
cmd_resize_floating(current_match, cmd_output, way, direction, floating_con, px);
|
||||||
return;
|
|
||||||
} else {
|
} else {
|
||||||
if (!cmd_resize_tiling_direction(current_match, cmd_output, way, direction, ppt))
|
if (strcmp(direction, "width") == 0 ||
|
||||||
return;
|
strcmp(direction, "height") == 0) {
|
||||||
|
if (!cmd_resize_tiling_width_height(current_match, cmd_output, current->con, way, direction, ppt))
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
if (!cmd_resize_tiling_direction(current_match, cmd_output, current->con, way, direction, ppt))
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -255,4 +255,38 @@ cmp_ok($content[0]->{rect}->{y}, '==', $oldrect->{y}, 'y the same as before');
|
||||||
cmp_ok($content[0]->{rect}->{height}, '<', $oldrect->{height}, 'height smaller than before');
|
cmp_ok($content[0]->{rect}->{height}, '<', $oldrect->{height}, 'height smaller than before');
|
||||||
cmp_ok($content[0]->{rect}->{width}, '==', $oldrect->{width}, 'width the same as before');
|
cmp_ok($content[0]->{rect}->{width}, '==', $oldrect->{width}, 'width the same as before');
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Check that resizing with criteria works
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
$tmp = fresh_workspace;
|
||||||
|
|
||||||
|
my $left = open_floating_window;
|
||||||
|
my $right = open_floating_window;
|
||||||
|
|
||||||
|
sub get_floating_rect {
|
||||||
|
my ($window_id) = @_;
|
||||||
|
|
||||||
|
my $floating_nodes = get_ws($tmp)->{floating_nodes};
|
||||||
|
for my $floating_node (@$floating_nodes) {
|
||||||
|
# Get all the windows within that floating container
|
||||||
|
my @window_ids = map { $_->{window} } @{$floating_node->{nodes}};
|
||||||
|
if ($window_id ~~ @window_ids) {
|
||||||
|
return $floating_node->{rect};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
# focus is on the right window, so we resize the left one using criteria
|
||||||
|
my $leftold = get_floating_rect($left->id);
|
||||||
|
my $rightold = get_floating_rect($right->id);
|
||||||
|
cmd '[id="' . $left->id . '"] resize shrink height 10px or 10ppt';
|
||||||
|
|
||||||
|
my $leftnew = get_floating_rect($left->id);
|
||||||
|
my $rightnew = get_floating_rect($right->id);
|
||||||
|
is($rightnew->{height}, $rightold->{height}, 'height of right container unchanged');
|
||||||
|
is($leftnew->{height}, $leftold->{height} - 10, 'height of left container changed');
|
||||||
|
|
||||||
done_testing;
|
done_testing;
|
||||||
|
|
Loading…
Reference in New Issue