appchooserwidget: search text using g_str_match_string()
authorNelson Benítez León <nbenitezl+gnome@gmail.com>
Wed, 15 Nov 2017 14:46:31 +0000 (19:46 +0500)
committerNelson Benítez León <nbenitezl+gnome@gmail.com>
Sat, 31 Mar 2018 08:48:30 +0000 (13:48 +0500)
so we match on diacritics (eg. accented letters) and also
search on text tokens. As a plus we also reduce code size.

https://bugzilla.gnome.org/show_bug.cgi?id=745128

gtk/gtkappchooserwidget.c

index 7f0e7525b2d9f5ad8677e0a261d30bd0c7c2ca40..65e4e88d240292a53a0d705bf4d686a6cffa8c0b 100644 (file)
@@ -307,58 +307,25 @@ gtk_app_chooser_search_equal_func (GtkTreeModel *model,
                                    GtkTreeIter  *iter,
                                    gpointer      user_data)
 {
-  gchar *normalized_key;
-  gchar *name, *normalized_name;
-  gchar *path, *normalized_path;
-  gchar *basename, *normalized_basename;
+  gchar *name;
+  gchar *exec_name;
   gboolean ret;
 
   if (key != NULL)
     {
-      normalized_key = g_utf8_casefold (key, -1);
-      g_assert (normalized_key != NULL);
-
       ret = TRUE;
 
       gtk_tree_model_get (model, iter,
                           COLUMN_NAME, &name,
-                          COLUMN_EXEC, &path,
+                          COLUMN_EXEC, &exec_name,
                           -1);
 
-      if (name != NULL)
-        {
-          normalized_name = g_utf8_casefold (name, -1);
-          g_assert (normalized_name != NULL);
-
-          if (strncmp (normalized_name, normalized_key, strlen (normalized_key)) == 0)
-            ret = FALSE;
-
-          g_free (normalized_name);
-        }
-
-      if (ret && path != NULL)
-        {
-          normalized_path = g_utf8_casefold (path, -1);
-          g_assert (normalized_path != NULL);
-
-          basename = g_path_get_basename (path);
-          g_assert (basename != NULL);
-
-          normalized_basename = g_utf8_casefold (basename, -1);
-          g_assert (normalized_basename != NULL);
-
-          if (strncmp (normalized_path, normalized_key, strlen (normalized_key)) == 0 ||
-              strncmp (normalized_basename, normalized_key, strlen (normalized_key)) == 0)
-            ret = FALSE;
-
-          g_free (basename);
-          g_free (normalized_basename);
-          g_free (normalized_path);
-        }
+      if ((name != NULL && g_str_match_string (key, name, TRUE)) ||
+          (exec_name != NULL && g_str_match_string (key, exec_name, FALSE)))
+        ret = FALSE;
 
       g_free (name);
-      g_free (path);
-      g_free (normalized_key);
+      g_free (exec_name);
 
       return ret;
     }