appDisplay: Use a proper string key for the app search provider

Since we're going to be caching results based on the result ID,
we need to return a string-based result ID to cache on.

https://bugzilla.gnome.org/show_bug.cgi?id=704912
This commit is contained in:
Jasper St. Pierre 2013-02-08 22:08:13 -05:00
parent 0590962d36
commit 27cac10d0c
2 changed files with 20 additions and 11 deletions

View File

@ -871,8 +871,8 @@ const AppSearchProvider = new Lang.Class({
getResultMetas: function(apps, callback) { getResultMetas: function(apps, callback) {
let metas = []; let metas = [];
for (let i = 0; i < apps.length; i++) { for (let i = 0; i < apps.length; i++) {
let app = apps[i]; let app = this._appSys.lookup_app(apps[i]);
metas.push({ 'id': app, metas.push({ 'id': app.get_id(),
'name': app.get_name(), 'name': app.get_name(),
'createIcon': function(size) { 'createIcon': function(size) {
return app.create_icon_texture(size); return app.create_icon_texture(size);
@ -894,7 +894,8 @@ const AppSearchProvider = new Lang.Class({
this.searchSystem.setResults(this, this._appSys.subsearch(previousResults, terms)); this.searchSystem.setResults(this, this._appSys.subsearch(previousResults, terms));
}, },
activateResult: function(app) { activateResult: function(result) {
let app = this._appSys.lookup_app(result);
let event = Clutter.get_current_event(); let event = Clutter.get_current_event();
let modifiers = event ? event.get_state() : 0; let modifiers = event ? event.get_state() : 0;
let openNewWindow = modifiers & Clutter.ModifierType.CONTROL_MASK; let openNewWindow = modifiers & Clutter.ModifierType.CONTROL_MASK;
@ -914,7 +915,7 @@ const AppSearchProvider = new Lang.Class({
}, },
createResultObject: function (resultMeta, terms) { createResultObject: function (resultMeta, terms) {
let app = resultMeta['id']; let app = this._appSys.lookup_app(resultMeta['id']);
return new AppIcon(app); return new AppIcon(app);
} }
}); });

View File

@ -681,13 +681,22 @@ sort_and_concat_results (ShellAppSystem *system,
GSList *prefix_matches, GSList *prefix_matches,
GSList *substring_matches) GSList *substring_matches)
{ {
GSList *matches = NULL;
GSList *l;
prefix_matches = g_slist_sort_with_data (prefix_matches, prefix_matches = g_slist_sort_with_data (prefix_matches,
compare_apps_by_usage, compare_apps_by_usage,
system); system);
substring_matches = g_slist_sort_with_data (substring_matches, substring_matches = g_slist_sort_with_data (substring_matches,
compare_apps_by_usage, compare_apps_by_usage,
system); system);
return g_slist_concat (prefix_matches, substring_matches);
for (l = substring_matches; l != NULL; l = l->next)
matches = g_slist_prepend (matches, (char *) shell_app_get_id (SHELL_APP (l->data)));
for (l = prefix_matches; l != NULL; l = l->next)
matches = g_slist_prepend (matches, (char *) shell_app_get_id (SHELL_APP (l->data)));
return g_slist_reverse (matches);
} }
/** /**
@ -734,7 +743,6 @@ search_tree (ShellAppSystem *self,
g_slist_free_full (normalized_terms, g_free); g_slist_free_full (normalized_terms, g_free);
return sort_and_concat_results (self, prefix_results, substring_results); return sort_and_concat_results (self, prefix_results, substring_results);
} }
/** /**
@ -744,7 +752,7 @@ search_tree (ShellAppSystem *self,
* *
* Search through applications for the given search terms. * Search through applications for the given search terms.
* *
* Returns: (transfer container) (element-type ShellApp): List of applications * Returns: (transfer container) (element-type utf8): List of applications
*/ */
GSList * GSList *
shell_app_system_initial_search (ShellAppSystem *self, shell_app_system_initial_search (ShellAppSystem *self,
@ -756,14 +764,14 @@ shell_app_system_initial_search (ShellAppSystem *self,
/** /**
* shell_app_system_subsearch: * shell_app_system_subsearch:
* @system: A #ShellAppSystem * @system: A #ShellAppSystem
* @previous_results: (element-type ShellApp): List of previous results * @previous_results: (element-type utf8): List of previous results
* @terms: (element-type utf8): List of terms, logical AND * @terms: (element-type utf8): List of terms, logical AND
* *
* Search through a previous result set; for more information, see * Search through a previous result set; for more information, see
* js/ui/search.js. Note that returned strings are only valid until * js/ui/search.js. Note that returned strings are only valid until
* a return to the main loop. * a return to the main loop.
* *
* Returns: (transfer container) (element-type ShellApp): List of application identifiers * Returns: (transfer container) (element-type utf8): List of application identifiers
*/ */
GSList * GSList *
shell_app_system_subsearch (ShellAppSystem *system, shell_app_system_subsearch (ShellAppSystem *system,
@ -779,8 +787,8 @@ shell_app_system_subsearch (ShellAppSystem *system,
for (iter = previous_results; iter; iter = iter->next) for (iter = previous_results; iter; iter = iter->next)
{ {
ShellApp *app = iter->data; ShellApp *app = shell_app_system_lookup_app (system, iter->data);
_shell_app_do_match (app, normalized_terms, _shell_app_do_match (app, normalized_terms,
&prefix_results, &prefix_results,
&substring_results); &substring_results);