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:
parent
216db2bb12
commit
63821f1ae7
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user