]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: don’t overwrite the window’s geometry after restarting
authorMichael Stapelberg <michael@stapelberg.de>
Fri, 13 Jun 2014 20:29:24 +0000 (22:29 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Fri, 13 Jun 2014 20:29:47 +0000 (22:29 +0200)
fixes #1263

src/manage.c
testcases/t/230-floating-fullscreen-restart.t

index dd103a9e848bdce09a52183cedc4ee9157355cdc..5ee6e8294831b6f2c780b590beeb2d3c69af92c9 100644 (file)
@@ -429,7 +429,8 @@ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cooki
      * window to be useful (smaller windows are usually overlays/toolbars/…
      * which are not managed by the wm anyways). We store the original geometry
      * here because it’s used for dock clients. */
-    nc->geometry = (Rect){ geom->x, geom->y, geom->width, geom->height };
+    if (nc->geometry.width == 0)
+        nc->geometry = (Rect){ geom->x, geom->y, geom->width, geom->height };
 
     if (want_floating) {
         DLOG("geometry = %d x %d\n", nc->geometry.width, nc->geometry.height);
index bf6afd3338f956fd6653f34d40bfd1dabe0aadf8..e4d51e2eb6c52db46be355761fc26770eee37fa5 100644 (file)
@@ -14,7 +14,8 @@
 # • http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf
 #   (unless you are already familiar with Perl)
 #
-# Ensures floating windows don’t drop out of fullscreen mode when restarting.
+# Ensures floating windows don’t drop out of fullscreen mode when restarting
+# and that they keep their geometry.
 # Ticket: #1263
 # Bug still in: 4.7.2-200-g570b572
 use i3test i3_autostart => 0;
@@ -34,12 +35,16 @@ my $window = open_window(wm_class => '__i3-test-window');
 cmd 'fullscreen';
 
 my ($nodes, $focus) = get_ws($tmp);
-is($nodes->{floating_nodes}->[0]->{nodes}->[0]->{fullscreen_mode}, 1, 'floating window in fullscreen mode');
+my $floating_win = $nodes->{floating_nodes}->[0]->{nodes}->[0];
+is($floating_win->{fullscreen_mode}, 1, 'floating window in fullscreen mode');
+my $old_geometry = $floating_win->{geometry};
 
 cmd 'restart';
 
 ($nodes, $focus) = get_ws($tmp);
-is($nodes->{floating_nodes}->[0]->{nodes}->[0]->{fullscreen_mode}, 1, 'floating window still in fullscreen mode');
+$floating_win = $nodes->{floating_nodes}->[0]->{nodes}->[0];
+is($floating_win->{fullscreen_mode}, 1, 'floating window still in fullscreen mode');
+is_deeply($floating_win->{geometry}, $old_geometry, 'floating window geometry still the same');
 
 exit_gracefully($pid);