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

We were always sort of cheating when we used objects as the search ID.
Since the new desktop file index will return us a list of desktop file
IDs, just use those as IDs instead.
This commit is contained in:
Jasper St. Pierre 2013-02-08 22:08:13 -05:00
parent fa8224d7b5
commit d749d646be
2 changed files with 20 additions and 11 deletions

View File

@ -864,8 +864,8 @@ const AppSearchProvider = new Lang.Class({
getResultMetas: function(apps, callback) {
let metas = [];
for (let i = 0; i < apps.length; i++) {
let app = apps[i];
metas.push({ 'id': app,
let app = this._appSys.lookup_app(apps[i]);
metas.push({ 'id': app.get_id(),
'name': app.get_name(),
'createIcon': function(size) {
return app.create_icon_texture(size);
@ -883,7 +883,8 @@ const AppSearchProvider = new Lang.Class({
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 modifiers = event ? event.get_state() : 0;
let openNewWindow = modifiers & Clutter.ModifierType.CONTROL_MASK;
@ -903,7 +904,7 @@ const AppSearchProvider = new Lang.Class({
},
createResultObject: function (resultMeta, terms) {
let app = resultMeta['id'];
let app = this._appSys.lookup_app(resultMeta['id']);
return new AppIcon(app);
}
});

View File

@ -336,13 +336,22 @@ sort_and_concat_results (ShellAppSystem *system,
GSList *prefix_matches,
GSList *substring_matches)
{
GSList *matches = NULL;
GSList *l;
prefix_matches = g_slist_sort_with_data (prefix_matches,
compare_apps_by_usage,
system);
substring_matches = g_slist_sort_with_data (substring_matches,
compare_apps_by_usage,
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);
}
/**
@ -389,7 +398,6 @@ search_tree (ShellAppSystem *self,
g_slist_free_full (normalized_terms, g_free);
return sort_and_concat_results (self, prefix_results, substring_results);
}
/**
@ -399,7 +407,7 @@ search_tree (ShellAppSystem *self,
*
* 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 *
shell_app_system_initial_search (ShellAppSystem *self,
@ -411,7 +419,7 @@ shell_app_system_initial_search (ShellAppSystem *self,
/**
* shell_app_system_subsearch:
* @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
*
* Search through a previous result set; for more information, see
@ -419,7 +427,7 @@ shell_app_system_initial_search (ShellAppSystem *self,
* the same as passed to shell_app_system_initial_search(). Note that returned
* strings are only valid until 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 *
shell_app_system_subsearch (ShellAppSystem *system,
@ -435,8 +443,8 @@ shell_app_system_subsearch (ShellAppSystem *system,
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,
&prefix_results,
&substring_results);