diff options
Diffstat (limited to 'navit/gui/gtk/destination.c')
| -rw-r--r-- | navit/gui/gtk/destination.c | 50 |
1 files changed, 34 insertions, 16 deletions
diff --git a/navit/gui/gtk/destination.c b/navit/gui/gtk/destination.c index 5f52e042b..6a0fbb5b7 100644 --- a/navit/gui/gtk/destination.c +++ b/navit/gui/gtk/destination.c @@ -50,22 +50,6 @@ static struct search_param { GtkTreeModel *liststore2; } search_param; -static void button_map(GtkWidget *widget, struct search_param *search) { - GtkTreePath *path; - GtkTreeViewColumn *focus_column; - struct pcoord *c=NULL; - GtkTreeIter iter; - - gtk_tree_view_get_cursor(GTK_TREE_VIEW(search->treeview), &path, &focus_column); - if(!path) - return; - if(!gtk_tree_model_get_iter(search->liststore2, &iter, path)) - return; - gtk_tree_model_get (GTK_TREE_MODEL (search->liststore2), &iter, COL_COUNT, &c, -1); - if (c) { - navit_set_center(search->nav, c, 1); - } -} static char *description(struct search_param *search, GtkTreeIter *iter) { char *desc,*car,*postal,*town,*street; @@ -89,6 +73,39 @@ static char *description(struct search_param *search, GtkTreeIter *iter) { return desc; } +static void button_map(GtkWidget *widget, struct search_param *search) { + GtkTreePath *path; + GtkTreeViewColumn *focus_column; + struct pcoord *point=NULL; /* A pointer on the geographical position of the selected map point */ + GtkTreeIter iter; + char *label; + GList* p; + + gtk_tree_view_get_cursor(GTK_TREE_VIEW(search->treeview), &path, &focus_column); + if(!path) + return; + if(!gtk_tree_model_get_iter(search->liststore2, &iter, path)) + return; + gtk_tree_model_get (GTK_TREE_MODEL (search->liststore2), &iter, COL_COUNT, &point, -1); + if (point) { + GList* list = NULL; + struct lcoord *result = g_new0(struct lcoord, 1); + result->c.x=point->x; + result->c.y=point->y; + result->label=description(search, &iter); /* Allocated here, freed by invoking g_free() below when parsing the GList */ + list = g_list_prepend(list, result); + navit_populate_search_results_map(search->nav, list, NULL); + /* Parse the GList starting at list and free all payloads before freeing the list itself */ + for(p=list; p; p=g_list_next(p)) { + if (((struct lcoord *)(p->data))->label) + g_free(((struct lcoord *)(p->data))->label); + } + g_list_free(list); + + navit_set_center(search->nav, point, 1); + } +} + static void button_destination(GtkWidget *widget, struct search_param *search) { struct pcoord *c=NULL; GtkTreeIter iter; @@ -99,6 +116,7 @@ static void button_destination(GtkWidget *widget, struct search_param *search) { gtk_tree_model_get (GTK_TREE_MODEL (search->liststore2), &iter, COL_COUNT, &c, -1); if (c) { desc=description(search, &iter); + navit_populate_search_results_map(search->nav, NULL, NULL); /* Remove any highlighted point on the map */ navit_set_destination(search->nav, c, desc, 1); g_free(desc); } |
