Bugfix: Position floating windows exactly where their geometry specified (Thanks B-Con)

Fixes #619
This commit is contained in:
Michael Stapelberg 2012-01-21 14:20:55 +00:00
parent 9798e5cae6
commit cb4c9b9d27
2 changed files with 11 additions and 5 deletions

View File

@ -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);

View File

@ -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;