diff options
-rw-r--r-- | navit/graphics.c | 19 | ||||
-rw-r--r-- | navit/graphics.h | 1 | ||||
-rw-r--r-- | navit/gui/internal/gui_internal.c | 1 | ||||
-rw-r--r-- | navit/navit.c | 2 |
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); |