[gnome-shell] Avoid doing expensive work when not mapped



commit 2f6c95199770e5bb751a1a1f72cdb745faf5555b
Author: Colin Walters <walters verbum org>
Date:   Fri Oct 2 20:17:34 2009 -0400

    Avoid doing expensive work when not mapped
    
    For some unknown reason we were connecting to app-added and
    app-removed on ShellAppMonitor in the AppDisplay class, which
    never made any use of the data.  Simply don't connect to those
    signals for now.  In the future we should have AppDisplay
    be using the AppIcon class which will more correctly handle
    dynamic changes.
    
    In the AppWell, avoid doing the full relayout until we're
    actually mapped.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=597169

 js/ui/appDisplay.js |   24 ++++++++++++++++--------
 1 files changed, 16 insertions(+), 8 deletions(-)
---
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index bcdfcff..7f2b812 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -192,14 +192,6 @@ AppDisplay.prototype = {
             this._appsStale = true;
             this._redisplay(GenericDisplay.RedisplayFlags.NONE);
         }));
-        this._appMonitor.connect('app-added', Lang.bind(this, function(monitor) {
-            this._appsStale = true;
-            this._redisplay(GenericDisplay.RedisplayFlags.NONE);
-        }));
-        this._appMonitor.connect('app-removed', Lang.bind(this, function(monitor) {
-            this._appsStale = true;
-            this._redisplay(GenericDisplay.RedisplayFlags.NONE);
-        }));
 
         this._focusInMenus = true;
         this._activeMenuIndex = -1;
@@ -770,6 +762,9 @@ AppWell.prototype = {
                                    x_align: Big.BoxAlignment.CENTER });
         this.actor._delegate = this;
 
+        this._pendingRedisplay = false;
+        this.actor.connect('notify::mapped', Lang.bind(this, this._onMappedNotify));
+
         this._grid = new WellGrid();
         this.actor.append(this._grid.actor, Big.BoxPackFlags.EXPAND);
 
@@ -809,7 +804,20 @@ AppWell.prototype = {
                             values[id] = index; return values; }, {});
     },
 
+    _onMappedNotify: function() {
+        let mapped = this.actor.mapped;
+        if (mapped && this._pendingRedisplay)
+            this._redisplay();
+    },
+
     _redisplay: function () {
+        let mapped = this.actor.mapped;
+        if (!mapped) {
+            this._pendingRedisplay = true;
+            return;
+        }
+        this._pendingRedisplay = false;
+
         this._grid.removeAll();
 
         let favoriteIds = this._appSystem.get_favorites();



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