r3385 - in trunk/src/target/OM-2007.2/applications/openmoko-appmanager2: . src

thomas at sita.openmoko.org thomas at sita.openmoko.org
Fri Nov 9 17:06:42 CET 2007


Author: thomas
Date: 2007-11-09 17:06:40 +0100 (Fri, 09 Nov 2007)
New Revision: 3385

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/appmanager-data.h
   trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/navigation-area.c
   trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/search-bar.c
Log:
* src/appmanager-data.h:
* src/navigation-area.c:
* src/search-bar.c: (text_changed_cb), (combo_changed_cb):

Optimise the filter function by doing some operations before filtering


Modified: trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/ChangeLog	2007-11-09 14:41:12 UTC (rev 3384)
+++ trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/ChangeLog	2007-11-09 16:06:40 UTC (rev 3385)
@@ -1,5 +1,13 @@
 2007-11-09  Thomas Wood  <thomas at openedhand.com>
 
+	* src/appmanager-data.h:
+	* src/navigation-area.c:
+	* src/search-bar.c: (text_changed_cb), (combo_changed_cb):
+
+	Optimise the filter function by doing some operations before filtering
+
+2007-11-09  Thomas Wood  <thomas at openedhand.com>
+
 	* src/package-store.c: (package_store_new): Filter out dbg,dev,doc and
 	  locale packages from the main package list.
 

Modified: trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/appmanager-data.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/appmanager-data.h	2007-11-09 14:41:12 UTC (rev 3384)
+++ trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/appmanager-data.h	2007-11-09 16:06:40 UTC (rev 3385)
@@ -75,6 +75,9 @@
   GtkToolItem      *remove_btn;  /* Remove toolbar button */
   
   GtkWidget        *searchbar;
+  /* these are used to optimise the filter function */
+  gboolean          searchbar_name_search;
+  const gchar      *searchbar_needle;
 } ApplicationManagerData;
 
 /*

Modified: trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/navigation-area.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/navigation-area.c	2007-11-09 14:41:12 UTC (rev 3384)
+++ trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/navigation-area.c	2007-11-09 16:06:40 UTC (rev 3385)
@@ -71,55 +71,29 @@
  */
 
 gboolean
-model_filter_func (GtkTreeModel *model, GtkTreeIter *iter, ApplicationManagerData *appdata)
+model_filter_func (GtkTreeModel *model, GtkTreeIter *iter, ApplicationManagerData *data)
 {
-  gboolean result = TRUE;
+  IPK_PACKAGE *pkg;
   
-  if (!appdata->searchbar)
-    return FALSE;
-    
+  if (!data->searchbar_needle)
+    return TRUE;
   
-  if (moko_search_bar_search_visible (MOKO_SEARCH_BAR (appdata->searchbar)))
+  gtk_tree_model_get (model, iter, COL_POINTER, &pkg, -1);
+  
+  if (!pkg)
+    return FALSE;
+
+ 
+  if (data->searchbar_name_search)
   {
-    gchar *haystack;
-    const gchar *needle;
-    GtkEntry *entry;
-    
-    gtk_tree_model_get (model, iter, COL_NAME, &haystack, -1);
-    
-    entry = moko_search_bar_get_entry (MOKO_SEARCH_BAR (appdata->searchbar));
-    needle = gtk_entry_get_text (entry);
-    
-    result = (strstr (haystack, needle) != NULL);
-    
-    g_free (haystack);
-    return result;
+    return (strstr (pkg->name, data->searchbar_needle) != NULL);
   }
   else
   {
-    GtkComboBox *combo;
-    GtkTreeIter cb_iter;
-    GtkTreeModel *cb_model;
-    gchar *needle;
-    IPK_PACKAGE *pkg;
-    
-    combo = moko_search_bar_get_combo_box (MOKO_SEARCH_BAR (appdata->searchbar));
-    if (!gtk_combo_box_get_active_iter (combo, &cb_iter))
-      return FALSE;
-    cb_model = gtk_combo_box_get_model (combo);
-    if (!cb_model) return FALSE;
-    gtk_tree_model_get (cb_model, &cb_iter, 0, &needle, -1);
-
-    gtk_tree_model_get (model, iter, COL_POINTER, &pkg, -1);
-
-    if (pkg && pkg->section && needle && !strcmp (pkg->section, needle))
-      result = TRUE;
-    else
-      result = FALSE;
-
-    g_free (needle);
-    return result;
+    return (!strcmp (pkg->section, data->searchbar_needle));
   }
+  
+
 }
 
 /*

Modified: trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/search-bar.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/search-bar.c	2007-11-09 14:41:12 UTC (rev 3384)
+++ trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/search-bar.c	2007-11-09 16:06:40 UTC (rev 3385)
@@ -35,7 +35,15 @@
 text_changed_cb (MokoSearchBar *searchbar, GtkEditable *editable, ApplicationManagerData *data)
 {
   GtkTreeModel *filter;
+  GtkEntry *entry;
+  const gchar *needle;
   
+  entry = moko_search_bar_get_entry (MOKO_SEARCH_BAR (data->searchbar));
+  needle = gtk_entry_get_text (entry);
+ 
+  data->searchbar_name_search = TRUE;
+  data->searchbar_needle = needle;
+
   filter = gtk_tree_view_get_model (GTK_TREE_VIEW (data->tvpkglist));
   gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter));
 }
@@ -44,14 +52,34 @@
 combo_changed_cb (MokoSearchBar *searchbar, GtkComboBox *combo, ApplicationManagerData *data)
 {
   GtkTreeModel *filter;
+  const gchar *needle;
+  GtkTreeIter cb_iter;
+  GtkTreeModel *cb_model;
+
+  if (!combo)
+    combo = moko_search_bar_get_combo_box (MOKO_SEARCH_BAR (data->searchbar));
+
+  if (!gtk_combo_box_get_active_iter (combo, &cb_iter))
+    return;
+
+  cb_model = gtk_combo_box_get_model (combo);
+  gtk_tree_model_get (cb_model, &cb_iter, 0, &needle, -1);
   
+  data->searchbar_name_search = FALSE;
+  data->searchbar_needle = needle;
+
+  
   filter = gtk_tree_view_get_model (GTK_TREE_VIEW (data->tvpkglist));
   gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter));
 }
 
 static void
 searchbar_toggled_cb (MokoSearchBar *searchbar, gboolean search, ApplicationManagerData *data)
-{
+{  
+  if (search)
+    text_changed_cb (searchbar, NULL, data);
+  else
+    combo_changed_cb (searchbar, NULL, data);
 }
 
 gboolean





More information about the commitlog mailing list