X-Git-Url: http://pileus.org/git/?p=grits;a=blobdiff_plain;f=src%2Fplugins%2Fmap.c;h=13f986c10e5dd2dbdc22245ff03d0a09483c1408;hp=d1297670385242039c47d3009076e3a4dcfacb99;hb=618983b0bfdc9af2d6dc368570a1911b892b5166;hpb=6374cf1c67a158f9703918d404f53d824a6d2a68 diff --git a/src/plugins/map.c b/src/plugins/map.c index d129767..13f986c 100644 --- a/src/plugins/map.c +++ b/src/plugins/map.c @@ -57,6 +57,10 @@ static gboolean _load_tile_cb(gpointer _data) { struct _LoadTileData *data = _data; g_debug("GritsPluginMap: _load_tile_cb start"); + if (data->map->aborted) { + g_debug("GritsPluginMap: _load_tile - aborted"); + return FALSE; + } guint *tex = g_new0(guint, 1); glGenTextures(1, tex); @@ -68,12 +72,13 @@ static gboolean _load_tile_cb(gpointer _data) (data->alpha ? GL_RGBA : GL_RGB), GL_UNSIGNED_BYTE, data->pixels); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glFlush(); data->tile->data = tex; - gtk_widget_queue_draw(GTK_WIDGET(data->map->viewer)); + if (data->map->viewer) + gtk_widget_queue_draw(GTK_WIDGET(data->map->viewer)); g_free(data->pixels); g_free(data); return FALSE; @@ -189,7 +194,6 @@ GritsPluginMap *grits_plugin_map_new(GritsViewer *viewer) map->viewer = g_object_ref(viewer); /* Load initial tiles */ - _load_tile(map->tiles, map); _update_tiles(NULL, map); /* Connect signals */ @@ -240,15 +244,17 @@ static void grits_plugin_map_dispose(GObject *gobject) map->aborted = TRUE; /* Drop references */ if (map->viewer) { - g_signal_handler_disconnect(map->viewer, map->sigid); - grits_viewer_remove(map->viewer, GRITS_OBJECT(map->tiles)); + GritsViewer *viewer = map->viewer; + map->viewer = NULL; + g_signal_handler_disconnect(viewer, map->sigid); + grits_viewer_remove(viewer, GRITS_OBJECT(map->tiles)); + g_object_unref(map->tiles); soup_session_abort(map->tms->http->soup); //soup_session_abort(map->wms->http->soup); g_thread_pool_free(map->threads, TRUE, TRUE); while (gtk_events_pending()) gtk_main_iteration(); - g_object_unref(map->viewer); - map->viewer = NULL; + g_object_unref(viewer); } G_OBJECT_CLASS(grits_plugin_map_parent_class)->dispose(gobject); }