summaryrefslogtreecommitdiff
path: root/navit/gui/gtk/destination.c
diff options
context:
space:
mode:
Diffstat (limited to 'navit/gui/gtk/destination.c')
-rw-r--r--navit/gui/gtk/destination.c50
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);
}