appDisplay: Only reload frequently used data when mapping the frequent view

If the user mostly uses the All Apps view and uses it as his default view,
we shouldn't reload frequent data after a timeout. Simply do it when the
view is mapped.

https://bugzilla.gnome.org/show_bug.cgi?id=723179
This commit is contained in:
Jasper St. Pierre 2014-01-28 11:06:21 -05:00
parent 36c69124f7
commit bdad4db9ec

View File

@ -561,17 +561,18 @@ const FrequentView = new Lang.Class({
this._noFrequentAppsLabel.hide(); this._noFrequentAppsLabel.hide();
this._usage = Shell.AppUsage.get_default(); this._usage = Shell.AppUsage.get_default();
this.actor.connect('notify::mapped', Lang.bind(this, function() {
if (this.actor.mapped)
this._redisplay();
}));
}, },
hasUsefulData: function() { hasUsefulData: function() {
return this._usage.get_most_used("").length >= MIN_FREQUENT_APPS_COUNT; return this._usage.get_most_used("").length >= MIN_FREQUENT_APPS_COUNT;
}, },
removeAll: function() { _loadApps: function() {
this._grid.destroyAll();
},
loadApps: function() {
let mostUsed = this._usage.get_most_used (""); let mostUsed = this._usage.get_most_used ("");
let hasUsefulData = this.hasUsefulData(); let hasUsefulData = this.hasUsefulData();
this._noFrequentAppsLabel.visible = !hasUsefulData; this._noFrequentAppsLabel.visible = !hasUsefulData;
@ -586,6 +587,11 @@ const FrequentView = new Lang.Class({
} }
}, },
_redisplay: function() {
this.removeAll();
this._loadApps();
},
// Called before allocation to calculate dynamic spacing // Called before allocation to calculate dynamic spacing
adaptToSize: function(width, height) { adaptToSize: function(width, height) {
let box = new Clutter.ActorBox(); let box = new Clutter.ActorBox();
@ -652,9 +658,6 @@ const AppDisplay = new Lang.Class({
Shell.AppSystem.get_default().connect('installed-changed', Lang.bind(this, function() { Shell.AppSystem.get_default().connect('installed-changed', Lang.bind(this, function() {
Main.queueDeferredWork(this._allAppsWorkId); Main.queueDeferredWork(this._allAppsWorkId);
})); }));
Main.overview.connect('showing', Lang.bind(this, function() {
Main.queueDeferredWork(this._frequentAppsWorkId);
}));
this._folderSettings = new Gio.Settings({ schema: 'org.gnome.desktop.app-folders' }); this._folderSettings = new Gio.Settings({ schema: 'org.gnome.desktop.app-folders' });
this._folderSettings.connect('changed::folder-children', Lang.bind(this, function() { this._folderSettings.connect('changed::folder-children', Lang.bind(this, function() {
Main.queueDeferredWork(this._allAppsWorkId); Main.queueDeferredWork(this._allAppsWorkId);
@ -720,7 +723,6 @@ const AppDisplay = new Lang.Class({
this._viewStack.add_actor(this._focusDummy); this._viewStack.add_actor(this._focusDummy);
this._allAppsWorkId = Main.initializeDeferredWork(this.actor, Lang.bind(this, this._redisplayAllApps)); this._allAppsWorkId = Main.initializeDeferredWork(this.actor, Lang.bind(this, this._redisplayAllApps));
this._frequentAppsWorkId = Main.initializeDeferredWork(this.actor, Lang.bind(this, this._redisplayFrequentApps));
}, },
_showView: function(activeIndex) { _showView: function(activeIndex) {
@ -754,13 +756,6 @@ const AppDisplay = new Lang.Class({
this._showView(Views.ALL); this._showView(Views.ALL);
}, },
_redisplayFrequentApps: function() {
let view = this._views[Views.FREQUENT].view;
view.removeAll();
view.loadApps();
},
_redisplayAllApps: function() { _redisplayAllApps: function() {
let view = this._views[Views.ALL].view; let view = this._views[Views.ALL].view;
view.removeAll(); view.removeAll();