From aab576eb58b4696fec971e0a7fe87b50985083c1 Mon Sep 17 00:00:00 2001 From: Thomas Thurman Date: Fri, 28 Aug 2009 14:40:37 -0400 Subject: [PATCH 1/1] area search now actually working --- belltower.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/belltower.c b/belltower.c index 70f6e22..f55cf95 100644 --- a/belltower.c +++ b/belltower.c @@ -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 */ -- 1.7.9.5