From 9d31576cf5167af8c51570c43e3906024f37c4c0 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 29 Oct 2012 11:12:55 -0400 Subject: [PATCH] App search: Match GenericName too This is making shell search results more useful in many cases, such as 'web', 'browser', spreadsheet'. https://bugzilla.gnome.org/show_bug.cgi?id=687121 --- src/shell-app.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/shell-app.c b/src/shell-app.c index 51a252498..8ff53ec7d 100644 --- a/src/shell-app.c +++ b/src/shell-app.c @@ -73,6 +73,7 @@ struct _ShellApp char *window_id_string; char *casefolded_name; + char *casefolded_generic_name; char *name_collation_key; char *casefolded_exec; char **casefolded_keywords; @@ -1310,6 +1311,7 @@ static void shell_app_init_search_data (ShellApp *app) { const char *name; + const char *generic_name; const char *exec; const char * const *keywords; char *normalized_exec; @@ -1319,6 +1321,12 @@ shell_app_init_search_data (ShellApp *app) name = g_app_info_get_name (G_APP_INFO (appinfo)); app->casefolded_name = shell_util_normalize_and_casefold (name); + generic_name = g_desktop_app_info_get_generic_name (appinfo); + if (generic_name) + app->casefolded_generic_name = shell_util_normalize_and_casefold (generic_name); + else + app->casefolded_generic_name = NULL; + exec = g_app_info_get_executable (G_APP_INFO (appinfo)); normalized_exec = shell_util_normalize_and_casefold (exec); app->casefolded_exec = trim_exec_line (normalized_exec); @@ -1388,6 +1396,18 @@ _shell_app_match_search_terms (ShellApp *app, current_match = MATCH_SUBSTRING; } + if (app->casefolded_generic_name) + { + p = strstr (app->casefolded_generic_name, term); + if (p != NULL) + { + if (p == app->casefolded_generic_name || *(p - 1) == ' ') + current_match = MATCH_PREFIX; + else if (current_match < MATCH_PREFIX) + current_match = MATCH_SUBSTRING; + } + } + if (app->casefolded_exec) { p = strstr (app->casefolded_exec, term); @@ -1497,6 +1517,7 @@ shell_app_finalize (GObject *object) g_free (app->window_id_string); g_free (app->casefolded_name); + g_free (app->casefolded_generic_name); g_free (app->name_collation_key); g_free (app->casefolded_exec); g_strfreev (app->casefolded_keywords);