[gnome-shell] workspaces-view: Handle clip rectangle separately



commit 6ce07abf509320cee311337e68ed3585293b4b03
Author: Florian MÃllner <fmuellner gnome org>
Date:   Wed Jun 22 00:28:42 2011 +0200

    workspaces-view: Handle clip rectangle separately
    
    After completing the overview transition, the workspace view is
    clipped to avoid overlapping the search entry/view selector titles
    while switching workspaces. For clipping, the view's position and
    size was used, which works well assuming that the workspace pager
    will start hidden or stay zoomed out while the overview is visible.
    However, that assumption holds no longer true, as auto-hiding the
    pager now depends on the number of workspaces, and thus may change
    while in the overview. For instance, when starting with the pager
    being visible, the clip area ends up being too small when moving
    all windows to the first workspace (and thus triggering auto-hide).
    
    As a fix, handle the clip rectangle separately from the view's
    geometry, and set it always to the area the workspaces would
    occupy with the pager hidden.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=653142

 js/ui/workspacesView.js |   21 ++++++++++++++++++++-
 1 files changed, 20 insertions(+), 1 deletions(-)
---
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index 19ec796..4a37b29 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -49,6 +49,10 @@ WorkspacesView.prototype = {
         this._height = 0;
         this._x = 0;
         this._y = 0;
+        this._clipX = 0;
+        this._clipY = 0;
+        this._clipWidth = 0;
+        this._clipHeight = 0;
         this._workspaceRatioSpacing = 0;
         this._spacing = 0;
         this._animating = false; // tweening
@@ -92,7 +96,8 @@ WorkspacesView.prototype = {
         this._overviewShownId =
             Main.overview.connect('shown',
                                  Lang.bind(this, function() {
-                this.actor.set_clip(this._x, this._y, this._width, this._height);
+                this.actor.set_clip(this._clipX, this._clipY,
+                                    this._clipWidth, this._clipHeight);
         }));
 
         this._scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
@@ -136,6 +141,13 @@ WorkspacesView.prototype = {
             this._workspaces[i].setGeometry(x, y, width, height);
     },
 
+    setClipRect: function(x, y, width, height) {
+        this._clipX = x;
+        this._clipY = y;
+        this._clipWidth = width;
+        this._clipHeight = height;
+    },
+
     _lookupWorkspaceForMetaWindow: function (metaWindow) {
         for (let i = 0; i < this._workspaces.length; i++) {
             if (this._workspaces[i].containsMetaWindow(metaWindow))
@@ -751,6 +763,13 @@ WorkspacesDisplay.prototype = {
 
         let rtl = (St.Widget.get_default_direction () == St.TextDirection.RTL);
 
+        let clipWidth = width - controlsVisible;
+        let clipHeight = (fullHeight / fullWidth) * clipWidth;
+        let clipX = rtl ? x + controlsVisible : x;
+        let clipY = y + (fullHeight - clipHeight) / 2;
+
+        this.workspacesView.setClipRect(clipX, clipY, clipWidth, clipHeight);
+
         if (this._zoomOut) {
             width -= controlsNatural;
             if (rtl)



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