[gnome-shell] search: Replace getResultMeta() with getResultMetas()



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]