[gnome-shell/wip/fmuellner/fix-zoom: 18/18] layout: Use custom actor for uiGroup



commit 6b924c00c5c171ce11663c855bad2ec3d230f158
Author: Florian Müllner <fmuellner gnome org>
Date:   Tue Mar 5 11:34:27 2019 +0100

    layout: Use custom actor for uiGroup
    
    The bind constraint that replaced the Shell.GenericContainer in commit
    f4682748faf4 is subtly different from the previous code:
    It forces the actor to have the same size as the stage, rather than just
    requesting that size.
    
    This breaks the magnifier which relies on the UI being able to be bigger
    than the display size. Fix by going back to using a custom actor.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/issues/646

 js/ui/layout.js | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)
---
diff --git a/js/ui/layout.js b/js/ui/layout.js
index b6cf05c13..e3c93a923 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -160,6 +160,19 @@ var Monitor = class Monitor {
     }
 };
 
+const UiActor = GObject.registerClass(
+class UiActor extends St.Widget {
+    vfunc_get_preferred_width (forHeight) {
+        let width = global.stage.width;
+        return [width, width];
+    }
+
+    vfunc_get_preferred_height (forWidth) {
+        let height = global.stage.height;
+        return [height, height];
+    }
+});
+
 const defaultParams = {
     trackFullscreen: false,
     affectsStruts: false,
@@ -200,12 +213,8 @@ var LayoutManager = GObject.registerClass({
         global.stage.no_clear_hint = true;
 
         // Set up stage hierarchy to group all UI actors under one container.
-        this.uiGroup = new St.Widget({ name: 'uiGroup' });
+        this.uiGroup = new UiActor({ name: 'uiGroup' });
         this.uiGroup.set_flags(Clutter.ActorFlags.NO_LAYOUT);
-        this.uiGroup.add_constraint(new Clutter.BindConstraint({
-            source: global.stage,
-            coordinate: Clutter.BindCoordinate.ALL,
-        }));
 
         global.stage.remove_actor(global.window_group);
         this.uiGroup.add_actor(global.window_group);


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