[gnome-shell] Only do redisplay when mapped
- From: Colin Walters <walters src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-shell] Only do redisplay when mapped
- Date: Wed, 28 Oct 2009 16:20:08 +0000 (UTC)
commit 94bd6f17180f0a8cbdbf2a66a47469fce601a9e1
Author: Colin Walters <walters verbum org>
Date: Sat Oct 24 12:43:56 2009 -0400
Only do redisplay when mapped
If we're not mapped, only queue up a redisplay. This avoids
e.g. changes in recent documents such as saving a file in GEdit
causing a lot of blocking I/O in the shell (we need to make
recent loading async as well).
https://bugzilla.gnome.org/show_bug.cgi?id=599560
js/ui/genericDisplay.js | 18 +++++++++++++++++-
1 files changed, 17 insertions(+), 1 deletions(-)
---
diff --git a/js/ui/genericDisplay.js b/js/ui/genericDisplay.js
index 9dafd33..4744669 100644
--- a/js/ui/genericDisplay.js
+++ b/js/ui/genericDisplay.js
@@ -314,7 +314,7 @@ GenericDisplayItem.prototype = {
// For some reason, we are not getting leave-event signal when we are dragging an item,
// so we should remove the link manually.
this._informationButton.actor.hide();
- }
+ }
};
Signals.addSignalMethods(GenericDisplayItem.prototype);
@@ -342,6 +342,9 @@ GenericDisplay.prototype = {
this._updateDisplayControl(false);
}));
+ this._pendingRedisplay = RedisplayFlags.NONE;
+ this._list.connect('notify::mapped', Lang.bind(this, this._onMappedNotify));
+
// map<itemId, Object> where Object represents the item info
this._allItems = {};
// set<itemId>
@@ -642,6 +645,11 @@ GenericDisplay.prototype = {
* FULL - Indicates that we need recreate all displayed items; implies RESET_CONTROLS as well
*/
_redisplay: function(flags) {
+ if (!this._list.mapped) {
+ this._pendingRedisplay |= flags;
+ return;
+ }
+
let isSubSearch = (flags & RedisplayFlags.SUBSEARCH) > 0;
let fullReload = (flags & RedisplayFlags.FULL) > 0;
let resetPage = (flags & RedisplayFlags.RESET_CONTROLS) > 0 || fullReload;
@@ -852,6 +860,14 @@ GenericDisplay.prototype = {
let item = this._findDisplayedByIndex(index);
item.markSelected(true);
this.emit('selected');
+ },
+
+ _onMappedNotify: function () {
+ let mapped = this._list.mapped;
+ if (mapped && this._pendingRedisplay > RedisplayFlags.NONE)
+ this._redisplay(this._pendingRedisplay);
+
+ this._pendingRedisplay = RedisplayFlags.NONE;
}
};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]