From: Michael Stapelberg Date: Sat, 21 Jan 2012 14:20:55 +0000 (+0000) Subject: Bugfix: Position floating windows exactly where their geometry specified (Thanks... X-Git-Tag: 4.1.2~4^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=cb4c9b9d27a095047a5ac22ae75f6ee17475ba18;p=i3%2Fi3 Bugfix: Position floating windows exactly where their geometry specified (Thanks B-Con) Fixes #619 --- diff --git a/src/floating.c b/src/floating.c index e74dc6bc..780d9138 100644 --- a/src/floating.c +++ b/src/floating.c @@ -176,6 +176,14 @@ void floating_enable(Con *con, bool automatic) { if (automatic) con->border_style = config.default_floating_border; + /* 5: Subtract the deco_height in order to make the floating window appear + * at precisely the position it specified in its original geometry (which + * is what applications might remember). */ + deco_height = (con->border_style == BS_NORMAL ? config.font.height + 5 : 0); + nc->rect.y -= deco_height; + + DLOG("Corrected y = %d (deco_height = %d)\n", nc->rect.y, deco_height); + TAILQ_INSERT_TAIL(&(nc->nodes_head), con, nodes); TAILQ_INSERT_TAIL(&(nc->focus_head), con, focused); diff --git a/testcases/t/005-floating.t b/testcases/t/005-floating.t index d605328d..688de40a 100644 --- a/testcases/t/005-floating.t +++ b/testcases/t/005-floating.t @@ -38,7 +38,7 @@ $window->unmap; $window = $x->root->create_child( class => WINDOW_CLASS_INPUT_OUTPUT, - rect => [ 1, 1, 80, 90], + rect => [ 20, 20, 80, 90], background_color => '#C0C0C0', window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_UTILITY'), event_mask => [ 'structure_notify' ], @@ -55,10 +55,8 @@ wait_for_map $x; cmp_ok($absolute->{width}, '==', 80, "i3 let the width at 80"); cmp_ok($absolute->{height}, '==', 90, "i3 let the height at 90"); -# We need to compare the position with decorations due to the way -# we do decoration rendering (on the parent frame) in the tree branch -cmp_ok($top->{x}, '==', 1, 'i3 mapped it to x=1'); -cmp_ok($top->{y}, '==', 19, 'i3 mapped it to y=18'); +cmp_ok($top->{x}, '==', 20, 'i3 mapped it to x=20'); +cmp_ok($top->{y}, '==', 20, 'i3 mapped it to y=20'); $window->unmap;