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
This commit is contained in:
parent
c8b1afbad6
commit
94bd6f1718
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user