area search now actually working
authorThomas Thurman <tthurman@gnome.org>
Fri, 28 Aug 2009 18:40:37 +0000 (14:40 -0400)
committerThomas Thurman <tthurman@gnome.org>
Fri, 28 Aug 2009 18:40:37 +0000 (14:40 -0400)
belltower.c

index 70f6e22..f55cf95 100644 (file)
@@ -433,6 +433,40 @@ single_tower_cb (tower *details,
   return FILTER_STOP;
 }
 
+/**
+ * A tower that was accepted by a filter.
+ */
+typedef struct {
+  char *sortkey;
+  char *primarykey;
+  char *displayname;
+} FoundTower;
+
+static FoundTower *
+found_tower_new (tower *basis)
+{
+  FoundTower* result = g_new (FoundTower, 1);
+
+  result->sortkey = g_strdup (basis->fields[FieldPrimaryKey]);
+  result->primarykey = g_strdup (basis->fields[FieldPrimaryKey]);
+  result->displayname = g_strdup_printf ("%s, %s (%s, %s)",
+                                        basis->fields[FieldDedication],
+                                        basis->fields[FieldPlace],
+                                        basis->fields[FieldBells],
+                                        basis->fields[FieldPracticeNight]);
+
+  return result;
+}
+
+static void
+found_tower_free (FoundTower *tower)
+{
+  g_free (tower->sortkey);
+  g_free (tower->primarykey);
+  g_free (tower->displayname);
+  g_free (tower);
+}
+
 static void
 parse_dove (ParseDoveCallback callback,
            GSList **filter_results,
@@ -496,7 +530,7 @@ parse_dove (ParseDoveCallback callback,
          if (filter_results)
            {
              *filter_results = g_slist_append (*filter_results,
-                                               g_strdup (result.fields[FieldPrimaryKey]));
+                                               found_tower_new (&result));
            }
        }
 
@@ -542,8 +576,9 @@ show_towers_from_list (GSList *list)
 {
   GtkWidget *dialog;
   GtkWidget *selector;
-  gchar *result = NULL;
+  gint result = -1;
   GSList *cursor;
+  gchar foo[2048];
 
   if (!list)
     {
@@ -570,8 +605,9 @@ show_towers_from_list (GSList *list)
 
   for (cursor=list; cursor; cursor=cursor->next)
     {
+      FoundTower* found = (FoundTower*) cursor->data;
       hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector),
-                                        cursor->data);
+                                        found->displayname);
     }
 
   hildon_picker_dialog_set_selector (HILDON_PICKER_DIALOG (dialog),
@@ -581,15 +617,20 @@ show_towers_from_list (GSList *list)
 
   if (gtk_dialog_run (GTK_DIALOG (dialog))==GTK_RESPONSE_OK)
     {
-      result = g_strdup (hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector)));
+      GList *rows = hildon_touch_selector_get_selected_rows (HILDON_TOUCH_SELECTOR (selector),
+                                                            0);
+      GtkTreePath *path = (GtkTreePath*) rows->data;
+      gint *indices = gtk_tree_path_get_indices (path);
+
+      result = *indices;
     }
 
   gtk_widget_destroy (GTK_WIDGET (dialog));
 
-  if (result)
+  if (result!=-1)
     {
-      show_tower (result);
-      g_free (result);
+      FoundTower *found = (FoundTower *) g_slist_nth_data (list, result);
+      show_tower (found->primarykey);
     }
 
   /* FIXME: and free the list */