[gnome-shell/gnome-3-32] dashSpacer: Don't trigger allocations from size negotiations



commit 92f1e88e06689632835b8e0a7dea910e3a24b1bf
Author: Florian Müllner <fmuellner gnome org>
Date:   Tue Apr 30 11:31:51 2019 +0000

    dashSpacer: Don't trigger allocations from size negotiations
    
    If an actor's allocation is outdated, clutter_actor_get_allocation_box()
    will queue a relayout. That's why it's advised to not use the function
    unless the allocation is known to be valid (namely during paint), but
    in particular not from within get_preferred_width/height vfuncs.
    
    Using the :allocation property (which may be outdated) would be better,
    but in this case we can simply delegate the request to the correct actor.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/issues/1065
    
    
    (cherry picked from commit d5ebd8c8168c89e6133c443bb1b503e3094f3250)

 js/ui/overviewControls.js | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)
---
diff --git a/js/ui/overviewControls.js b/js/ui/overviewControls.js
index 5b95b749d..930bbb220 100644
--- a/js/ui/overviewControls.js
+++ b/js/ui/overviewControls.js
@@ -369,17 +369,15 @@ class DashSpacer extends St.Widget {
     }
 
     vfunc_get_preferred_width(forHeight) {
-        let box = this.get_allocation_box();
-        let minWidth = super.vfunc_get_preferred_width(forHeight)[0];
-        let natWidth = box.x2 - box.x1;
-        return [minWidth, natWidth];
+        if (this._bindConstraint)
+            return this._bindConstraint.source.get_preferred_width(forHeight);
+        return super.vfunc_get_preferred_width(forHeight);
     }
 
     vfunc_get_preferred_height(forWidth) {
-        let box = this.get_allocation_box();
-        let minHeight = super.vfunc_get_preferred_height(forWidth)[0];
-        let natHeight = box.y2 - box.y1;
-        return [minHeight, natHeight];
+        if (this._bindConstraint)
+            return this._bindConstraint.source.get_preferred_height(forWidth);
+        return super.vfunc_get_preferred_height(forWidth);
     }
 });
 


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