]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Position floating windows exactly where their geometry specified (Thanks...
authorMichael Stapelberg <michael@stapelberg.de>
Sat, 21 Jan 2012 14:20:55 +0000 (14:20 +0000)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 21 Jan 2012 14:20:55 +0000 (14:20 +0000)
Fixes #619

src/floating.c
testcases/t/005-floating.t

index e74dc6bc8b7e6a27484a684374d602aa5540fedc..780d9138f6b90356f4d8919dd78a4e5173f64c97 100644 (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);
 
index d605328d491124ca9c4556da56afcf4f0ce85c0b..688de40a5634a5e0d8250ea44715e985d8d5a4dd 100644 (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;