Add hardcoded default applications list taken from online.gnome.org
The previous list of all applications in a random order was obviously temporary. This patch improves things by adding a static list, taken from the online.gnome.org/applications data. In the future we will either have a vendor-chosen static list, or a fully dynamic system. http://bugzilla.gnome.org/show_bug.cgi?id=562184 svn path=/trunk/; revision=84
This commit is contained in:
parent
c12de59864
commit
258834ed8f
@ -10,6 +10,32 @@ const Tidy = imports.gi.Tidy;
|
|||||||
const Meta = imports.gi.Meta;
|
const Meta = imports.gi.Meta;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
|
|
||||||
|
// TODO - move this into GConf once we're not a plugin anymore
|
||||||
|
// but have taken over metacity
|
||||||
|
// This list is taken from GNOME Online popular applications
|
||||||
|
// http://online.gnome.org/applications
|
||||||
|
// but with nautilus removed
|
||||||
|
const DEFAULT_APPLICATIONS = [
|
||||||
|
'mozilla-firefox.desktop',
|
||||||
|
'gnome-terminal.desktop',
|
||||||
|
'evolution.desktop',
|
||||||
|
'evince.desktop',
|
||||||
|
'gedit.desktop',
|
||||||
|
'mozilla-thunderbird.desktop',
|
||||||
|
'totem.desktop',
|
||||||
|
'gnome-file-roller.desktop',
|
||||||
|
'rhythmbox.desktop',
|
||||||
|
'epiphany.desktop',
|
||||||
|
'xchat.desktop',
|
||||||
|
'openoffice.org-1.9-writer.desktop',
|
||||||
|
'emacs.desktop',
|
||||||
|
'gnome-system-monitor.desktop',
|
||||||
|
'openoffice.org-1.9-calc.desktop',
|
||||||
|
'eclipse.desktop',
|
||||||
|
'openoffice.org-1.9-impress.desktop',
|
||||||
|
'vncviewer.desktop'
|
||||||
|
];
|
||||||
|
|
||||||
const APPDISPLAY_NAME_COLOR = new Clutter.Color();
|
const APPDISPLAY_NAME_COLOR = new Clutter.Color();
|
||||||
APPDISPLAY_NAME_COLOR.from_pixel(0xffffffff);
|
APPDISPLAY_NAME_COLOR.from_pixel(0xffffffff);
|
||||||
const APPDISPLAY_COMMENT_COLOR = new Clutter.Color();
|
const APPDISPLAY_COMMENT_COLOR = new Clutter.Color();
|
||||||
@ -89,6 +115,7 @@ AppDisplay.prototype = {
|
|||||||
_init : function(x, y, width, height) {
|
_init : function(x, y, width, height) {
|
||||||
let me = this;
|
let me = this;
|
||||||
let global = Shell.global_get();
|
let global = Shell.global_get();
|
||||||
|
this._search = '';
|
||||||
this._x = x;
|
this._x = x;
|
||||||
this._y = y;
|
this._y = y;
|
||||||
this._width = width;
|
this._width = width;
|
||||||
@ -105,7 +132,7 @@ AppDisplay.prototype = {
|
|||||||
this._max_items = this._height / (APPDISPLAY_HEIGHT + APPDISPLAY_PADDING);
|
this._max_items = this._height / (APPDISPLAY_HEIGHT + APPDISPLAY_PADDING);
|
||||||
},
|
},
|
||||||
|
|
||||||
_refresh: function() {
|
_refreshCache: function() {
|
||||||
let me = this;
|
let me = this;
|
||||||
|
|
||||||
if (!this._appsStale)
|
if (!this._appsStale)
|
||||||
@ -121,14 +148,34 @@ AppDisplay.prototype = {
|
|||||||
let appid = appinfo.get_id();
|
let appid = appinfo.get_id();
|
||||||
this._appset[appid] = appinfo;
|
this._appset[appid] = appinfo;
|
||||||
}
|
}
|
||||||
for (i = 0; i < apps.length && i < this._max_items; i++) {
|
|
||||||
let appinfo = apps[i];
|
|
||||||
let appid = appinfo.get_id();
|
|
||||||
this._filterAdd(appid);
|
|
||||||
}
|
|
||||||
this._appsStale = false;
|
this._appsStale = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_removeItem: function(appid) {
|
||||||
|
let item = this._displayed[appid];
|
||||||
|
let group = item.actor;
|
||||||
|
group.destroy();
|
||||||
|
delete this._displayed[appid];
|
||||||
|
},
|
||||||
|
|
||||||
|
_removeAll: function() {
|
||||||
|
for (appid in this._displayed)
|
||||||
|
this._removeItem(appid);
|
||||||
|
},
|
||||||
|
|
||||||
|
_setDefaultList: function() {
|
||||||
|
this._removeAll();
|
||||||
|
let added = 0;
|
||||||
|
for (let i = 0; i < DEFAULT_APPLICATIONS.length && added < this._max_items; i++) {
|
||||||
|
let appid = DEFAULT_APPLICATIONS[i];
|
||||||
|
let appinfo = this._appset[appid];
|
||||||
|
if (appinfo) {
|
||||||
|
this._filterAdd(appid);
|
||||||
|
added += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
_filterAdd: function(appid) {
|
_filterAdd: function(appid) {
|
||||||
let me = this;
|
let me = this;
|
||||||
|
|
||||||
@ -147,10 +194,9 @@ AppDisplay.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_filterRemove: function(appid) {
|
_filterRemove: function(appid) {
|
||||||
|
// In the future, do some sort of fade out or other effect here
|
||||||
let item = this._displayed[appid];
|
let item = this._displayed[appid];
|
||||||
let group = item.actor;
|
this._removeItem(item);
|
||||||
group.destroy();
|
|
||||||
delete this._displayed[appid];
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_appinfoMatches: function(appinfo, search) {
|
_appinfoMatches: function(appinfo, search) {
|
||||||
@ -166,35 +212,48 @@ AppDisplay.prototype = {
|
|||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_sortApps: function(appids) {
|
||||||
|
let me = this;
|
||||||
|
return appids.sort(function (a,b) {
|
||||||
|
let appA = me._appset[a];
|
||||||
|
let appB = me._appset[b];
|
||||||
|
return appA.get_name().localeCompare(appB.get_name());
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
_doSearchFilter: function() {
|
_doSearchFilter: function() {
|
||||||
let c = 0;
|
this._removeAll();
|
||||||
for (appid in this._displayed) {
|
let matchedApps = [];
|
||||||
let app = this._appset[appid];
|
|
||||||
if (!this._appinfoMatches(app, this._search))
|
|
||||||
this._filterRemove(appid);
|
|
||||||
else
|
|
||||||
c += 1;
|
|
||||||
}
|
|
||||||
for (appid in this._appset) {
|
for (appid in this._appset) {
|
||||||
if (c >= this._max_items)
|
if (matchedApps.length >= this._max_items)
|
||||||
break;
|
break;
|
||||||
if (appid in this._displayed)
|
if (appid in this._displayed)
|
||||||
continue;
|
continue;
|
||||||
let app = this._appset[appid];
|
let app = this._appset[appid];
|
||||||
if (this._appinfoMatches(app, this._search)) {
|
if (this._appinfoMatches(app, this._search))
|
||||||
this._filterAdd(appid);
|
matchedApps.push(appid);
|
||||||
c += 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
this._sortApps(matchedApps);
|
||||||
|
for (let i = 0; i < matchedApps.length; i++) {
|
||||||
|
this._filterAdd(matchedApps[i]);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_redisplay: function() {
|
||||||
|
this._refreshCache();
|
||||||
|
if (!this._search)
|
||||||
|
this._setDefaultList();
|
||||||
|
else
|
||||||
|
this._doSearchFilter();
|
||||||
},
|
},
|
||||||
|
|
||||||
setSearch: function(text) {
|
setSearch: function(text) {
|
||||||
this._search = text.toLowerCase();
|
this._search = text.toLowerCase();
|
||||||
this._doSearchFilter();
|
this._redisplay();
|
||||||
},
|
},
|
||||||
|
|
||||||
show: function() {
|
show: function() {
|
||||||
this._refresh();
|
this._redisplay();
|
||||||
this._grid.show();
|
this._grid.show();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user