[gnome-shell] workspace: Account for window picker padding



commit 124eb1ca187928b07cc333c0134491a1edd05a77
Author: Florian Müllner <fmuellner gnome org>
Date:   Fri Jun 26 02:56:35 2020 +0200

    workspace: Account for window picker padding
    
    Workspaces are supposed to request the work area as their preferred
    size, however the widget will adjust the sizes returned by the
    layout manager to account for borders and padding.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1345

 js/ui/workspace.js | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)
---
diff --git a/js/ui/workspace.js b/js/ui/workspace.js
index 14670d1004..f4189ec4da 100644
--- a/js/ui/workspace.js
+++ b/js/ui/workspace.js
@@ -520,26 +520,40 @@ var WorkspaceLayout = GObject.registerClass({
         return this._layout.strategy.computeWindowSlots(this._layout, availArea);
     }
 
+    _getAdjustedWorkarea(container) {
+        const workarea = this._workarea.copy();
+
+        if (container instanceof St.Widget) {
+            const themeNode = container.get_theme_node();
+            workarea.width -= themeNode.get_horizontal_padding();
+            workarea.height -= themeNode.get_vertical_padding();
+        }
+
+        return workarea;
+    }
+
     vfunc_set_container(container) {
         this._container = container;
         this._stateAdjustment.actor = container;
     }
 
     vfunc_get_preferred_width(container, forHeight) {
+        const workarea = this._getAdjustedWorkarea(container);
         if (forHeight === -1)
-            return [0, this._workarea.width];
+            return [0, workarea.width];
 
-        const workAreaAspectRatio = this._workarea.width / this._workarea.height;
+        const workAreaAspectRatio = workarea.width / workarea.height;
         const widthPreservingAspectRatio = forHeight * workAreaAspectRatio;
 
         return [0, widthPreservingAspectRatio];
     }
 
     vfunc_get_preferred_height(container, forWidth) {
+        const workarea = this._getAdjustedWorkarea(container);
         if (forWidth === -1)
-            return [0, this._workarea.height];
+            return [0, workarea.height];
 
-        const workAreaAspectRatio = this._workarea.width / this._workarea.height;
+        const workAreaAspectRatio = workarea.width / workarea.height;
         const heightPreservingAspectRatio = forWidth / workAreaAspectRatio;
 
         return [0, heightPreservingAspectRatio];


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