[gnome-control-center/extensible-shell] [shell] use a common string as the search and filter target



commit 58961babdc65d9da92c53400c7d476f54391358d
Author: Thomas Wood <thomas wood intel com>
Date:   Sat Jan 30 10:40:16 2010 +0000

    [shell] use a common string as the search and filter target
    
    Use the same search target string in the filter function as the
    string displayed in the search result renderer.

 shell/control-center.c        |   31 +++++++++++++++++--------------
 shell/shell-search-renderer.c |   28 ++++++++++++++--------------
 2 files changed, 31 insertions(+), 28 deletions(-)
---
diff --git a/shell/control-center.c b/shell/control-center.c
index f34a8c0..b05a94f 100644
--- a/shell/control-center.c
+++ b/shell/control-center.c
@@ -65,7 +65,7 @@ enum
   COL_ID,
   COL_PIXBUF,
   COL_CATEGORY,
-  COL_DESCRIPTION,
+  COL_SEARCH_TARGET,
 
   N_COLS
 };
@@ -224,33 +224,29 @@ model_filter_func (GtkTreeModel *model,
                    GtkTreeIter  *iter,
                    ShellData    *data)
 {
-  gchar *name, *description;
+  gchar *name, *target;
   gchar *needle, *haystack;
-  gchar *full_string;
   gboolean result;
 
   gtk_tree_model_get (model, iter, COL_NAME, &name,
-                      COL_DESCRIPTION, &description, -1);
+                      COL_SEARCH_TARGET, &target, -1);
 
-  if (!data->filter_string || !name || !description)
+  if (!data->filter_string || !name || !target)
     {
       g_free (name);
-      g_free (description);
+      g_free (target);
       return FALSE;
     }
 
-  full_string = g_strdup_printf ("%s - %s", name, description);
-
   needle = g_utf8_casefold (data->filter_string, -1);
-  haystack = g_utf8_casefold (full_string, -1);
+  haystack = g_utf8_casefold (target, -1);
 
   result = (strstr (haystack, needle) != NULL);
 
   g_free (name);
-  g_free (description);
+  g_free (target);
   g_free (haystack);
   g_free (needle);
-  g_free (full_string);
 
   return result;
 }
@@ -309,7 +305,7 @@ fill_model (ShellData *data)
   gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (w), data->search_renderer,
                                  "title", COL_NAME);
   gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (w), data->search_renderer,
-                                 "description", COL_DESCRIPTION);
+                                 "search-target", COL_SEARCH_TARGET);
 
   g_signal_connect (w, "item-activated",
                     G_CALLBACK (item_activated_cb), data);
@@ -373,6 +369,7 @@ fill_model (ShellData *data)
                   == GMENU_TREE_ITEM_ENTRY)
                 {
                   GError *err = NULL;
+                  gchar *search_target;
                   const gchar *icon = gmenu_tree_entry_get_icon (f->data);
                   const gchar *name = gmenu_tree_entry_get_name (f->data);
                   const gchar *id = gmenu_tree_entry_get_desktop_file_id (f->data);
@@ -405,14 +402,18 @@ fill_model (ShellData *data)
 
                   g_free (icon2);
 
+                  search_target = g_strconcat (name, " - ", comment, NULL);
+
                   gtk_list_store_insert_with_values (data->store, NULL, 0,
                                                      COL_NAME, name,
                                                      COL_EXEC, exec,
                                                      COL_ID, id,
                                                      COL_PIXBUF, pixbuf,
                                                      COL_CATEGORY, dir_name,
-                                                     COL_DESCRIPTION, comment,
+                                                     COL_SEARCH_TARGET, search_target,
                                                      -1);
+
+                  g_free (search_target);
                 }
             }
         }
@@ -498,7 +499,9 @@ search_entry_changed_cb (GtkEntry  *entry,
   g_free (data->filter_string);
   data->filter_string = g_strdup (gtk_entry_get_text (entry));
 
-  g_object_set (data->search_renderer, "search-string", data->filter_string, NULL);
+  g_object_set (data->search_renderer,
+                "search-string", data->filter_string,
+                NULL);
 
   if (!g_strcmp0 (data->filter_string, ""))
     {
diff --git a/shell/shell-search-renderer.c b/shell/shell-search-renderer.c
index 0bb1d3b..6d0ca9f 100644
--- a/shell/shell-search-renderer.c
+++ b/shell/shell-search-renderer.c
@@ -29,7 +29,7 @@ G_DEFINE_TYPE (ShellSearchRenderer, shell_search_renderer, GTK_TYPE_CELL_RENDERE
 struct _ShellSearchRendererPrivate
 {
   gchar *title;
-  gchar *description;
+  gchar *search_target;
   gchar *search_string;
 
   PangoLayout *layout;
@@ -38,7 +38,7 @@ struct _ShellSearchRendererPrivate
 enum
 {
   PROP_TITLE = 1,
-  PROP_DESCRIPTION,
+  PROP_SEARCH_TARGET,
   PROP_SEARCH_STRING
 };
 
@@ -52,7 +52,7 @@ shell_search_renderer_get_property (GObject    *object,
   switch (property_id)
     {
   case PROP_TITLE:
-  case PROP_DESCRIPTION:
+  case PROP_SEARCH_TARGET:
   case PROP_SEARCH_STRING:
     break;
 
@@ -77,9 +77,9 @@ shell_search_renderer_set_property (GObject      *object,
     priv->title = g_value_dup_string (value);
     break;
 
-  case PROP_DESCRIPTION:
-    g_free (priv->description);
-    priv->description = g_value_dup_string (value);
+  case PROP_SEARCH_TARGET:
+    g_free (priv->search_target);
+    priv->search_target = g_value_dup_string (value);
     break;
 
   case PROP_SEARCH_STRING:
@@ -109,10 +109,10 @@ shell_search_renderer_finalize (GObject *object)
       priv->title = NULL;
     }
 
-  if (priv->description)
+  if (priv->search_target)
     {
-      g_free (priv->description);
-      priv->description = NULL;
+      g_free (priv->search_target);
+      priv->search_target = NULL;
     }
 
   if (priv->search_string)
@@ -138,7 +138,7 @@ shell_search_renderer_set_layout (ShellSearchRenderer *cell, GtkWidget *widget)
       pango_layout_set_ellipsize (priv->layout, PANGO_ELLIPSIZE_END);
     }
 
-  full_string = g_strdup_printf ("%s - %s", priv->title, priv->description);
+  full_string = priv->search_target;
 
   needle = g_utf8_casefold (priv->search_string, -1);
   haystack = g_utf8_casefold (full_string, -1);
@@ -263,12 +263,12 @@ shell_search_renderer_class_init (ShellSearchRendererClass *klass)
                                G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
   g_object_class_install_property (object_class, PROP_TITLE, pspec);
 
-  pspec = g_param_spec_string ("description",
-                               "Description",
-                               "Item description",
+  pspec = g_param_spec_string ("search-target",
+                               "Search Target",
+                               "The string that will be searched",
                                "",
                                G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  g_object_class_install_property (object_class, PROP_DESCRIPTION, pspec);
+  g_object_class_install_property (object_class, PROP_SEARCH_TARGET, pspec);
 
   pspec = g_param_spec_string ("search-string",
                                "Search String",



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]