[gnome-shell/gnome-3-8] appDisplay: Fix cut-off folders in All view



commit 3c66f1a4d9809439b8bcf55bad1d419436cc917f
Author: Florian Müllner <fmuellner gnome org>
Date:   Thu May 16 17:20:32 2013 +0200

    appDisplay: Fix cut-off folders in All view
    
    We already take care of growing the view if open folders overlap
    at the bottom, however folder popups may still end up being cut
    off when opening above the source icon - if the popup is high enough,
    its y coordinate will be negative and therefore outside the parent's
    allocation. To fix, we can either make sure that folders pop up below
    their source icon in that case, or adjust the parent grid's position
    as necessary while a folder is open. This implements the latter.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=694371

 js/ui/appDisplay.js |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)
---
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index cc17f63..e46897f 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -279,8 +279,12 @@ const AllView = new Lang.Class({
                 this._eventBlocker.reactive = isOpen;
                 this._currentPopup = isOpen ? popup : null;
                 this._updateIconOpacities(isOpen);
-                if (isOpen)
+                if (isOpen) {
                     this._ensureIconVisible(popup.actor);
+                    this._grid.actor.y = popup.parentOffset;
+                } else {
+                    this._grid.actor.y = 0;
+                }
             }));
     },
 
@@ -575,7 +579,9 @@ const FolderIcon = new Lang.Class({
         // Position the popup above or below the source icon
         if (side == St.Side.BOTTOM) {
             this._popup.actor.show();
-            this._popup.actor.y = this.actor.y - this._popup.actor.height;
+            let y = this.actor.y - this._popup.actor.height;
+            this._popup.parentOffset = y < 0 ? -y : 0;
+            this._popup.actor.y = Math.max(y, 0);
             this._popup.actor.hide();
         } else {
             this._popup.actor.y = this.actor.y + this.actor.height;
@@ -598,6 +604,7 @@ const AppFolderPopup = new Lang.Class({
         this._arrowSide = side;
 
         this._isOpen = false;
+        this.parentOffset = 0;
 
         this.actor = new St.Widget({ layout_manager: new Clutter.BinLayout(),
                                      visible: false,


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