diff options
-rw-r--r-- | navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c b/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c index 677fb6652..4da2cbafe 100644 --- a/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c +++ b/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c @@ -108,6 +108,7 @@ struct graphics_image_priv { }; static GHashTable *hImageData; /*hastable for uncompressed image data*/ +static int hImageDataCount; static struct graphics_image_priv image_error; static void @@ -126,8 +127,16 @@ graphics_destroy_image(gpointer data) static void graphics_destroy(struct graphics_priv *gr) { - if (!gr->parent) + dbg(0,"enter win %p\n",gr->win); + if (gr->win) + g_object_unref(gr->win); + dbg(0,"widget %p\n",gr->widget); + if (gr->widget) + g_object_unref(gr->widget); + dbg(0,"hImageDataCount %d\n",hImageDataCount); + if (!--hImageDataCount) g_hash_table_destroy(hImageData); + g_free(gr); } static void @@ -1235,7 +1244,8 @@ graphics_gtk_drawing_area_new(struct navit *nav, struct graphics_methods *meth, } //create hash table for uncompressed image data - hImageData = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, graphics_destroy_image); + if (!hImageDataCount++) + hImageData = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, graphics_destroy_image); return this; } |