use application monitoring to show most used apps in the menu

The menu is filled with apps that are know to ShellAppMonitor, and then with default apps if there are not enough of them.
This commit is contained in:
Milan Bouchet-Valat 2009-04-23 16:41:24 +02:00 committed by Colin Walters
parent 216db2bb12
commit 63821f1ae7

View File

@ -45,6 +45,8 @@ const DEFAULT_APPLICATIONS = [
'vncviewer.desktop' 'vncviewer.desktop'
]; ];
const MAX_ITEMS = 30;
/* This class represents a single display item containing information about an application. /* This class represents a single display item containing information about an application.
* *
* appInfo - GAppInfo object containing information about the application * appInfo - GAppInfo object containing information about the application
@ -225,17 +227,20 @@ AppDisplay.prototype = {
// map<itemId, array of category names> // map<itemId, array of category names>
this._appCategories = {}; this._appCategories = {};
let me = this; this._appMonitor = new Shell.AppMonitor();
this._appSystem = new Shell.AppSystem(); this._appSystem = new Shell.AppSystem();
this._appsStale = true; this._appsStale = true;
this._appSystem.connect('changed', function(mon) { this._appSystem.connect('changed', Lang.bind(this, function(appSys) {
me._appsStale = true; this._appsStale = true;
// We still need to determine what events other than search can trigger // We still need to determine what events other than search can trigger
// a change in the set of applications that are being shown while the // a change in the set of applications that are being shown while the
// user in in the overlay mode, however let's redisplay just in case. // user in in the overlay mode, however let's redisplay just in case.
me._redisplay(false); this._redisplay(false);
me._redisplayMenus(); this._redisplayMenus();
}); }));
this._appMonitor.connect('changed', Lang.bind(this, function(monitor) {
this._redisplay(false)
}));
// Load the GAppInfos now so it doesn't slow down the first // Load the GAppInfos now so it doesn't slow down the first
// transition into the overlay // transition into the overlay
@ -370,16 +375,33 @@ AppDisplay.prototype = {
this._appsStale = false; this._appsStale = false;
}, },
// Sets the list of the displayed items based on the list of DEFAULT_APPLICATIONS. // Sets the list of the displayed items based on the most used apps.
_setDefaultList : function() { _setDefaultList : function() {
// Ask or more app than we need, since the list of recently used apps
// might contain an app we don't have a desktop file for
var apps = this._appMonitor.get_apps (0, Math.round(MAX_ITEMS * 1.5));
this._matchedItems = []; this._matchedItems = [];
for (let i = 0; i < DEFAULT_APPLICATIONS.length; i++) { for (let i = 0; i < apps.length; i++) {
let appId = DEFAULT_APPLICATIONS[i]; if (this._matchedItems.length > MAX_ITEMS)
break;
let appId = apps[i] + ".desktop";
let appInfo = this._allItems[appId]; let appInfo = this._allItems[appId];
if (appInfo) { if (appInfo) {
this._matchedItems.push(appId); this._matchedItems.push(appId);
} }
} }
// Fill the list with default applications it's not full yet
for (let i = 0; i < DEFAULT_APPLICATIONS.length; i++) {
if (this._matchedItems.length > MAX_ITEMS)
break;
let appId = DEFAULT_APPLICATIONS[i];
let appInfo = this._allItems[appId];
// Don't add if not available or already present in the list
if (appInfo && (this._matchedItems.indexOf(appId) == -1)) {
this._matchedItems.push(appId);
}
}
}, },
// Compares items associated with the item ids based on the alphabetical order // Compares items associated with the item ids based on the alphabetical order