diff --git a/src/cmdparse.y b/src/cmdparse.y index ec8e6c2c..df7b6efe 100644 --- a/src/cmdparse.y +++ b/src/cmdparse.y @@ -785,12 +785,12 @@ resize: focused->parent->rect.y -= px; focused->parent->rect.height += px; } else if (direction == TOK_DOWN) { - focused->rect.height += px; + focused->parent->rect.height += px; } else if (direction == TOK_LEFT) { - focused->rect.x -= px; - focused->rect.width += px; + focused->parent->rect.x -= px; + focused->parent->rect.width += px; } else { - focused->rect.width += px; + focused->parent->rect.width += px; } } else { LOG("tiling resize\n"); diff --git a/testcases/t/41-resize.t b/testcases/t/41-resize.t index 1717e8f2..33f4889c 100644 --- a/testcases/t/41-resize.t +++ b/testcases/t/41-resize.t @@ -46,4 +46,75 @@ cmd 'split h'; is($nodes->[0]->{percent}, 0.25, 'top window got only 25%'); is($nodes->[1]->{percent}, 0.75, 'bottom window got 75%'); +############################################################ +# checks that resizing floating windows works +############################################################ + +$tmp = fresh_workspace; + +$top = open_standard_window($x); +sleep 0.25; + +cmd 'floating enable'; + +my @content = @{get_ws($tmp)->{floating_nodes}}; +cmp_ok(@content, '==', 1, 'one floating node on this ws'); + +# up +my $oldrect = $content[0]->{rect}; + +cmd 'resize grow up 10 px or 25 ppt'; + +@content = @{get_ws($tmp)->{floating_nodes}}; +cmp_ok($content[0]->{rect}->{y}, '<', $oldrect->{y}, 'y smaller than before'); +cmp_ok($content[0]->{rect}->{y}, '==', $oldrect->{y} - 10, 'y exactly 10 px smaller'); +cmp_ok($content[0]->{rect}->{x}, '==', $oldrect->{x}, 'x untouched'); +cmp_ok($content[0]->{rect}->{height}, '>', $oldrect->{height}, 'height bigger than before'); +cmp_ok($content[0]->{rect}->{height}, '==', $oldrect->{height} + 10, 'height exactly 10 px higher'); +cmp_ok($content[0]->{rect}->{width}, '==', $oldrect->{width}, 'x untouched'); + +# up, but with a different amount of px +$oldrect = $content[0]->{rect}; + +cmd 'resize grow up 12 px or 25 ppt'; + +@content = @{get_ws($tmp)->{floating_nodes}}; +cmp_ok($content[0]->{rect}->{y}, '<', $oldrect->{y}, 'y smaller than before'); +cmp_ok($content[0]->{rect}->{y}, '==', $oldrect->{y} - 12, 'y exactly 10 px smaller'); +cmp_ok($content[0]->{rect}->{x}, '==', $oldrect->{x}, 'x untouched'); +cmp_ok($content[0]->{rect}->{height}, '>', $oldrect->{height}, 'height bigger than before'); +cmp_ok($content[0]->{rect}->{height}, '==', $oldrect->{height} + 12, 'height exactly 10 px higher'); +cmp_ok($content[0]->{rect}->{width}, '==', $oldrect->{width}, 'x untouched'); + +# left +$oldrect = $content[0]->{rect}; + +cmd 'resize grow left 10 px or 25 ppt'; + +@content = @{get_ws($tmp)->{floating_nodes}}; +cmp_ok($content[0]->{rect}->{x}, '<', $oldrect->{x}, 'x smaller than before'); +cmp_ok($content[0]->{rect}->{width}, '>', $oldrect->{width}, 'width bigger than before'); + +# right +$oldrect = $content[0]->{rect}; + +cmd 'resize grow right 10 px or 25 ppt'; + +@content = @{get_ws($tmp)->{floating_nodes}}; +cmp_ok($content[0]->{rect}->{x}, '==', $oldrect->{x}, 'x the same as before'); +cmp_ok($content[0]->{rect}->{y}, '==', $oldrect->{y}, 'y the same as before'); +cmp_ok($content[0]->{rect}->{width}, '>', $oldrect->{width}, 'width bigger than before'); +cmp_ok($content[0]->{rect}->{height}, '==', $oldrect->{height}, 'height the same as before'); + +# down +$oldrect = $content[0]->{rect}; + +cmd 'resize grow down 10 px or 25 ppt'; + +@content = @{get_ws($tmp)->{floating_nodes}}; +cmp_ok($content[0]->{rect}->{x}, '==', $oldrect->{x}, 'x the same as before'); +cmp_ok($content[0]->{rect}->{y}, '==', $oldrect->{y}, 'y the same as before'); +cmp_ok($content[0]->{rect}->{height}, '>', $oldrect->{height}, 'height bigger than before'); +cmp_ok($content[0]->{rect}->{width}, '==', $oldrect->{width}, 'width the same as before'); + done_testing;