From 2f6c95199770e5bb751a1a1f72cdb745faf5555b Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Fri, 2 Oct 2009 20:17:34 -0400 Subject: [PATCH] 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 file changed, 16 insertions(+), 8 deletions(-) diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index bcdfcffa0..7f2b8127b 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();