summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--navit/graphics.c19
-rw-r--r--navit/graphics.h1
-rw-r--r--navit/gui/internal/gui_internal.c1
-rw-r--r--navit/navit.c2
4 files changed, 21 insertions, 2 deletions
diff --git a/navit/graphics.c b/navit/graphics.c
index 2040e72d9..3b6a7fc8e 100644
--- a/navit/graphics.c
+++ b/navit/graphics.c
@@ -2179,7 +2179,10 @@ do_draw(struct displaylist *displaylist, int cancel, int flags)
void graphics_displaylist_draw(struct graphics *gra, struct displaylist *displaylist, struct transformation *trans, struct layout *l, int flags)
{
int order=transform_get_order(trans);
- displaylist->dc.trans=trans;
+ if(displaylist->dc.trans && displaylist->dc.trans!=trans)
+ transform_destroy(displaylist->dc.trans);
+ if(displaylist->dc.trans!=trans)
+ displaylist->dc.trans=transform_dup(trans);
displaylist->dc.gra=gra;
displaylist->dc.mindist=transform_get_scale(trans)/2;
// FIXME find a better place to set the background color
@@ -2217,7 +2220,10 @@ static void graphics_load_mapset(struct graphics *gra, struct displaylist *displ
displaylist->dc.gra=gra;
displaylist->ms=mapset;
- displaylist->dc.trans=trans;
+ if(displaylist->dc.trans && displaylist->dc.trans!=trans)
+ transform_destroy(displaylist->dc.trans);
+ if(displaylist->dc.trans!=trans)
+ displaylist->dc.trans=transform_dup(trans);
displaylist->workload=async ? 100 : 0;
displaylist->cb=cb;
displaylist->seq++;
@@ -2335,6 +2341,15 @@ struct displaylist * graphics_displaylist_new(void)
return ret;
}
+void graphics_displaylist_destroy(struct displaylist *displaylist)
+{
+ if(displaylist->dc.trans)
+ transform_destroy(displaylist->dc.trans);
+ g_free(displaylist);
+
+}
+
+
/**
* Get the map item which given displayitem is based on.
* NOTE: returned structure doesn't contain any attributes or coordinates. type, map, idhi and idlow seem to be the only useable members.
diff --git a/navit/graphics.h b/navit/graphics.h
index d03f09bdb..1b9eb705d 100644
--- a/navit/graphics.h
+++ b/navit/graphics.h
@@ -184,6 +184,7 @@ struct displaylist_handle *graphics_displaylist_open(struct displaylist *display
struct displayitem *graphics_displaylist_next(struct displaylist_handle *dlh);
void graphics_displaylist_close(struct displaylist_handle *dlh);
struct displaylist *graphics_displaylist_new(void);
+void graphics_displaylist_destroy(struct displaylist *displaylist);
struct map_selection *displaylist_get_selection(struct displaylist *displaylist);
GList *displaylist_get_clicked_list(struct displaylist *displaylist, struct point *p, int radius);
struct item *graphics_displayitem_get_item(struct displayitem *di);
diff --git a/navit/gui/internal/gui_internal.c b/navit/gui/internal/gui_internal.c
index 5c131a9a0..5b2febff1 100644
--- a/navit/gui/internal/gui_internal.c
+++ b/navit/gui/internal/gui_internal.c
@@ -5642,6 +5642,7 @@ gui_internal_cmd_menu2(struct gui_priv *this, char *function, struct attr **in,
gui_internal_html_load_href(this, href, replace);
return;
}
+ /* FIXME: third argument should be 1 when called from OSD button and 0 when called from dbus or similar interface (see r2872) */
gui_internal_cmd_menu(this, NULL, 0, href);
}
diff --git a/navit/navit.c b/navit/navit.c
index 37ed29349..1bff73ed2 100644
--- a/navit/navit.c
+++ b/navit/navit.c
@@ -3224,6 +3224,8 @@ navit_destroy(struct navit *this_)
map_destroy(this_->former_destination);
+ graphics_displaylist_destroy(this_->displaylist);
+
ms = navit_get_mapset(this_);
if(ms)
mapset_destroy(ms);