[gnome-shell] Restart: fix maximized windows flickering to the wrong struts



commit 61fb62f969abf882ae6232f48623342b7cbfc356
Author: Owen W. Taylor <otaylor fishsoup net>
Date:   Thu Feb 4 13:13:13 2016 -0500

    Restart: fix maximized windows flickering to the wrong struts
    
    When we restart, we need to update the struts for the screen before
    we enter the main loop, or maximized windows will get resized to the
    size of the screen without struts, then resized back.
    
    A workaround is needed for a Clutter bug that occurs when we get
    the size of an actor before the first paint of the stage.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=761566

 js/ui/layout.js |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)
---
diff --git a/js/ui/layout.js b/js/ui/layout.js
index 7ec6867..9d481cf 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -591,7 +591,10 @@ const LayoutManager = new Lang.Class({
         this.addChrome(this._coverPane);
 
         if (Meta.is_restart()) {
-            // On restart, we don't do an animation
+            // On restart, we don't do an animation. Force an update of the
+            // regions immediately so that maximized windows restore to the
+            // right size taking struts into account.
+            this._updateRegions();
         } else if (Main.sessionMode.isGreeter) {
             this.panelBox.translation_y = -this.panelBox.height;
         } else {
@@ -938,6 +941,11 @@ const LayoutManager = new Lang.Class({
         if (Main.modalCount > 0)
             return GLib.SOURCE_REMOVE;
 
+        // Bug workaround - get_transformed_position()/get_transformed_size() don't work after
+        // a change in stage size until the first pick or paint.
+        // https://bugzilla.gnome.org/show_bug.cgi?id=761565
+        global.stage.get_actor_at_pos(Clutter.PickMode.ALL, 0, 0);
+
         let rects = [], struts = [], i;
         let isPopupMenuVisible = global.top_window_group.get_children().some(isPopupMetaWindow);
         let wantsInputRegion = !isPopupMenuVisible;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]