[gnome-shell] search: Replace getResultMeta() with getResultMetas()
- From: Florian MÃllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] search: Replace getResultMeta() with getResultMetas()
- Date: Tue, 21 Feb 2012 22:01:44 +0000 (UTC)
commit 53d9ea7a2c282ef2dcbfe2703c9ba40087fbf257
Author: Florian MÃllner <fmuellner gnome org>
Date: Fri Feb 17 16:39:27 2012 +0100
search: Replace getResultMeta() with getResultMetas()
Save some function calls by fetching all search results we want to
display for a provider at once, rather than one result at a time.
https://bugzilla.gnome.org/show_bug.cgi?id=663125
js/ui/appDisplay.js | 38 ++++++++++++++++++++++++--------------
js/ui/contactDisplay.js | 20 ++++++++++++--------
js/ui/docDisplay.js | 25 +++++++++++++++----------
js/ui/placeDisplay.js | 25 +++++++++++++++----------
js/ui/search.js | 12 ++++++------
js/ui/searchDisplay.js | 11 +++++++----
js/ui/wanda.js | 33 +++++++++++++++++----------------
7 files changed, 96 insertions(+), 68 deletions(-)
---
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index 5d845e6..28c820c 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -312,13 +312,18 @@ const AppSearchProvider = new Lang.Class({
this._appSys = Shell.AppSystem.get_default();
},
- getResultMeta: function(app) {
- return { 'id': app,
- 'name': app.get_name(),
- 'createIcon': function(size) {
- return app.create_icon_texture(size);
- }
- };
+ getResultMetas: function(apps) {
+ let metas = [];
+ for (let i = 0; i < apps.length; i++) {
+ let app = apps[i];
+ metas.push({ 'id': app,
+ 'name': app.get_name(),
+ 'createIcon': function(size) {
+ return app.create_icon_texture(size);
+ }
+ });
+ }
+ return metas;
},
getInitialResultSet: function(terms) {
@@ -369,13 +374,18 @@ const SettingsSearchProvider = new Lang.Class({
this._gnomecc = this._appSys.lookup_app('gnome-control-center.desktop');
},
- getResultMeta: function(pref) {
- return { 'id': pref,
- 'name': pref.get_name(),
- 'createIcon': function(size) {
- return pref.create_icon_texture(size);
- }
- };
+ getResultMetas: function(prefs) {
+ let metas = [];
+ for (let i = 0; i < prefs.length; i++) {
+ let pref = prefs[i];
+ metas.push({ 'id': pref,
+ 'name': pref.get_name(),
+ 'createIcon': function(size) {
+ return pref.create_icon_texture(size);
+ }
+ });
+ }
+ return metas;
},
getInitialResultSet: function(terms) {
diff --git a/js/ui/contactDisplay.js b/js/ui/contactDisplay.js
index ed213d4..e501d80 100644
--- a/js/ui/contactDisplay.js
+++ b/js/ui/contactDisplay.js
@@ -149,14 +149,18 @@ const ContactSearchProvider = new Lang.Class({
this._contactSys = Shell.ContactSystem.get_default();
},
- getResultMeta: function(id) {
- let contact = new Contact(id);
- return { 'id': id,
- 'name': contact.alias,
- 'createIcon': function(size) {
- return contact.createIcon(size);
- }
- };
+ getResultMetas: function(ids) {
+ let metas = [];
+ for (let i = 0; i < ids.length; i++) {
+ let contact = new Contact(ids[i]);
+ metas.push({ 'id': ids[i],
+ 'name': contact.alias,
+ 'createIcon': function(size) {
+ return contact.createIcon(size);
+ }
+ });
+ }
+ return metas;
},
getInitialResultSet: function(terms) {
diff --git a/js/ui/docDisplay.js b/js/ui/docDisplay.js
index b331d03..dc840da 100644
--- a/js/ui/docDisplay.js
+++ b/js/ui/docDisplay.js
@@ -14,16 +14,21 @@ const DocSearchProvider = new Lang.Class({
this._docManager = DocInfo.getDocManager();
},
- getResultMeta: function(resultId) {
- let docInfo = this._docManager.lookupByUri(resultId);
- if (!docInfo)
- return null;
- return { 'id': resultId,
- 'name': docInfo.name,
- 'createIcon': function(size) {
- return docInfo.createIcon(size);
- }
- };
+ getResultMetas: function(resultIds) {
+ let metas = [];
+ for (let i = 0; i < resultIds.length; i++) {
+ let docInfo = this._docManager.lookupByUri(resultIds[i]);
+ if (!docInfo)
+ metas.push(null);
+ else
+ metas.push({ 'id': resultIds[i],
+ 'name': docInfo.name,
+ 'createIcon': function(size) {
+ return docInfo.createIcon(size);
+ }
+ });
+ }
+ return metas;
},
activateResult: function(id, params) {
diff --git a/js/ui/placeDisplay.js b/js/ui/placeDisplay.js
index 334cdab..9c1352c 100644
--- a/js/ui/placeDisplay.js
+++ b/js/ui/placeDisplay.js
@@ -367,16 +367,21 @@ const PlaceSearchProvider = new Lang.Class({
this.parent(_("PLACES & DEVICES"));
},
- getResultMeta: function(resultId) {
- let placeInfo = Main.placesManager.lookupPlaceById(resultId);
- if (!placeInfo)
- return null;
- return { 'id': resultId,
- 'name': placeInfo.name,
- 'createIcon': function(size) {
- return placeInfo.iconFactory(size);
- }
- };
+ getResultMetas: function(resultIds) {
+ let metas = [];
+ for (let i = 0; i < resultIds.length; i++) {
+ let placeInfo = Main.placesManager.lookupPlaceById(resultIds[i]);
+ if (!placeInfo)
+ metas.push(null);
+ else
+ metas.push({ 'id': resultIds[i],
+ 'name': placeInfo.name,
+ 'createIcon': function(size) {
+ return placeInfo.iconFactory(size);
+ }
+ });
+ }
+ return metas;
},
activateResult: function(id, params) {
diff --git a/js/ui/search.js b/js/ui/search.js
index 52cd7a8..86173c6 100644
--- a/js/ui/search.js
+++ b/js/ui/search.js
@@ -190,14 +190,14 @@ const SearchProvider = new Lang.Class({
},
/**
- * getResultMeta:
- * @id: Result identifier string
+ * getResultMetas:
+ * @ids: Result identifier strings
*
- * Return an object with 'id', 'name', (both strings) and 'createIcon'
- * (function(size) returning a Clutter.Texture) properties which describe
- * the given search result.
+ * Return an array of objects with 'id', 'name', (both strings) and
+ * 'createIcon' (function(size) returning a Clutter.Texture) properties
+ * with the same number of members as @ids
*/
- getResultMeta: function(id) {
+ getResultMetas: function(ids) {
throw new Error('Not implemented');
},
diff --git a/js/ui/searchDisplay.js b/js/ui/searchDisplay.js
index 57478b7..85a0631 100644
--- a/js/ui/searchDisplay.js
+++ b/js/ui/searchDisplay.js
@@ -126,10 +126,13 @@ const GridSearchResults = new Lang.Class({
let canDisplay = this._grid.childrenInRow(this._width) * MAX_SEARCH_RESULTS_ROWS
- this._grid.visibleItemsCount();
- for (let i = Math.min(this._notDisplayedResult.length, canDisplay); i > 0; i--) {
- let result = this._notDisplayedResult.shift();
- let meta = this.provider.getResultMeta(result);
- let display = new SearchResult(this.provider, meta, this._terms);
+ let numResults = Math.min(this._notDisplayedResult.length, canDisplay);
+ if (numResults == 0)
+ return;
+ let results = this._notDisplayedResult.splice(0, numResults);
+ let metas = this.provider.getResultMetas(results);
+ for (let i = 0; i < metas.length; i++) {
+ let display = new SearchResult(this.provider, metas[i], this._terms);
this._grid.addItem(display.actor);
}
},
diff --git a/js/ui/wanda.js b/js/ui/wanda.js
index 9deb448..632b251 100644
--- a/js/ui/wanda.js
+++ b/js/ui/wanda.js
@@ -168,22 +168,23 @@ const WandaSearchProvider = new Lang.Class({
this.parent(_("Your favorite Easter Egg"));
},
- getResultMeta: function(fish) {
- return { 'id': fish,
- 'name': capitalize(fish),
- 'createIcon': function(iconSize) {
- // for DND only (maybe could be improved)
- // DON'T use St.Icon here, it crashes the shell
- // (dnd.js code assumes it can query the actor size
- // without parenting it, while StWidget accesses
- // StThemeNode in get_preferred_width/height, which
- // triggers an assertion failure)
- return St.TextureCache.get_default().load_icon_name(null,
- 'face-smile',
- St.IconType.FULLCOLOR,
- iconSize);
- }
- };
+ getResultMetas: function(fish) {
+ return [{ 'id': fish[0], // there may be many fish in the sea, but
+ // only one which speaks the truth!
+ 'name': capitalize(fish[0]),
+ 'createIcon': function(iconSize) {
+ // for DND only (maybe could be improved)
+ // DON'T use St.Icon here, it crashes the shell
+ // (dnd.js code assumes it can query the actor size
+ // without parenting it, while StWidget accesses
+ // StThemeNode in get_preferred_width/height, which
+ // triggers an assertion failure)
+ return St.TextureCache.get_default().load_icon_name(null,
+ 'face-smile',
+ St.IconType.FULLCOLOR,
+ iconSize);
+ }
+ }];
},
getInitialResultSet: function(terms) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]