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:
Colin Walters 2008-11-25 19:58:49 +00:00
parent c12de59864
commit 258834ed8f

View File

@ -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();
}, },