]> Pileus Git - grits/blobdiff - src/plugins/sat.c
More reference counting updates
[grits] / src / plugins / sat.c
index 0640c52660530f3084e1d13af795c532d64cb1a7..8fe6e091ab27a3de2bd2807b8ceeab12cf6e9c81 100644 (file)
@@ -25,7 +25,6 @@
 
 #include <time.h>
 #include <glib/gstdio.h>
-#include <GL/gl.h>
 
 #include <grits.h>
 
@@ -47,6 +46,10 @@ static gboolean _load_tile_cb(gpointer _data)
 {
        struct _LoadTileData *data = _data;
        g_debug("GritsPluginSat: _load_tile_cb start");
+       if (data->sat->aborted) {
+               g_debug("GritsPluginSat: _load_tile - aborted");
+               return FALSE;
+       }
 
        guint *tex = g_new0(guint, 1);
        glGenTextures(1, tex);
@@ -58,8 +61,8 @@ 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;
@@ -174,7 +177,6 @@ GritsPluginSat *grits_plugin_sat_new(GritsViewer *viewer)
        sat->viewer = g_object_ref(viewer);
 
        /* Load initial tiles */
-       _load_tile(sat->tiles, sat);
        _update_tiles(NULL, sat);
 
        /* Connect signals */
@@ -220,14 +222,16 @@ static void grits_plugin_sat_dispose(GObject *gobject)
        sat->aborted = TRUE;
        /* Drop references */
        if (sat->viewer) {
-               g_signal_handler_disconnect(sat->viewer, sat->sigid);
-               grits_viewer_remove(sat->viewer, GRITS_OBJECT(sat->tiles));
+               GritsViewer *viewer = sat->viewer;
+               sat->viewer = NULL;
+               g_signal_handler_disconnect(viewer, sat->sigid);
+               grits_viewer_remove(viewer, GRITS_OBJECT(sat->tiles));
+               g_object_unref(sat->tiles);
                soup_session_abort(sat->wms->http->soup);
                g_thread_pool_free(sat->threads, TRUE, TRUE);
                while (gtk_events_pending())
                        gtk_main_iteration();
-               g_object_unref(sat->viewer);
-               sat->viewer = NULL;
+               g_object_unref(viewer);
        }
        G_OBJECT_CLASS(grits_plugin_sat_parent_class)->dispose(gobject);
 }