]> Pileus Git - grits/blobdiff - src/grits-opengl.c
Remove some unused API cruft
[grits] / src / grits-opengl.c
index 14515ae3a760a230967fb1db472e56040d18008c..49a9c533015d9413c5f9d28fb67aae432beafb71 100644 (file)
@@ -587,13 +587,13 @@ static void _objects_free(gpointer value, gpointer _)
 {
        struct RenderLevel *level = value;
        if (level->sorted.next)
-               g_list_free(level->sorted.next);
+               g_list_free_full(level->sorted.next, g_object_unref);
        if (level->unsorted.next)
-               g_list_free(level->unsorted.next);
+               g_list_free_full(level->unsorted.next, g_object_unref);
        g_free(level);
 }
 
-static gpointer grits_opengl_add(GritsViewer *_opengl, GritsObject *object,
+static void grits_opengl_add(GritsViewer *_opengl, GritsObject *object,
                gint num, gboolean sort)
 {
        g_assert(GRITS_IS_OPENGL(_opengl));
@@ -617,26 +617,22 @@ static gpointer grits_opengl_add(GritsViewer *_opengl, GritsObject *object,
        if (list->next)
                list->next->prev = link;
        list->next = link;
+       object->ref = link;
        g_mutex_unlock(&opengl->objects_lock);
-       return link;
 }
 
-static GritsObject *grits_opengl_remove(GritsViewer *_opengl, GritsObject *object)
+void grits_opengl_remove(GritsViewer *_opengl, GritsObject *object)
 {
        g_assert(GRITS_IS_OPENGL(_opengl));
        GritsOpenGL *opengl = GRITS_OPENGL(_opengl);
-       GList *link = object->ref;
        g_mutex_lock(&opengl->objects_lock);
+       GList *link = object->ref;
        /* Just unlink and free it, link->prev is assured */
        link->prev->next = link->next;
        if (link->next)
                link->next->prev = link->prev;
-       g_mutex_unlock(&opengl->objects_lock);
-       object->ref    = NULL;
-       object->viewer = NULL;
        g_free(link);
-       g_object_unref(object);
-       return object;
+       g_mutex_unlock(&opengl->objects_lock);
 }
 
 /****************
@@ -657,6 +653,15 @@ static void grits_opengl_init(GritsOpenGL *opengl)
 static void grits_opengl_dispose(GObject *_opengl)
 {
        g_debug("GritsOpenGL: dispose");
+       GritsOpenGL *opengl = GRITS_OPENGL(_opengl);
+       if (opengl->objects) {
+               GQueue *objects = opengl->objects;;
+               opengl->objects = NULL;
+               g_mutex_lock(&opengl->objects_lock);
+               g_queue_foreach(objects, _objects_free, NULL);
+               g_queue_free(objects);
+               g_mutex_unlock(&opengl->objects_lock);
+       }
        G_OBJECT_CLASS(grits_opengl_parent_class)->dispose(_opengl);
 }
 static void grits_opengl_finalize(GObject *_opengl)
@@ -664,10 +669,9 @@ static void grits_opengl_finalize(GObject *_opengl)
        g_debug("GritsOpenGL: finalize");
        GritsOpenGL *opengl = GRITS_OPENGL(_opengl);
        roam_sphere_free(opengl->sphere);
-       g_queue_foreach(opengl->objects, _objects_free, NULL);
-       g_queue_free(opengl->objects);
        g_mutex_clear(&opengl->objects_lock);
        g_mutex_clear(&opengl->sphere_lock);
+       gtk_gl_disable(GTK_WIDGET(opengl));
        G_OBJECT_CLASS(grits_opengl_parent_class)->finalize(_opengl);
 }
 static void grits_opengl_class_init(GritsOpenGLClass *klass)