]> Pileus Git - grits/blobdiff - src/gis-opengl.c
Add mouse support
[grits] / src / gis-opengl.c
index 420e21332fb968ffd16761cde456c96a012e6ec4..c1d6fd5e03729a8b7211645f8ef7de5d89485c99 100644 (file)
@@ -296,7 +296,6 @@ static void _unload_object(GisOpenGL *self, GisObject *object)
        g_debug("GisOpenGL: unload_object");
        if (GIS_IS_MARKER(object)) {
                GisMarker *marker = GIS_MARKER(object);
-               g_debug("delete_texture: %d", marker->tex);
                glDeleteTextures(1, &marker->tex);
        }
 }
@@ -395,6 +394,7 @@ static gboolean on_expose(GisOpenGL *self, GdkEventExpose *event, gpointer _)
 #else
        g_tree_foreach(self->objects, _draw_level, self);
        if (self->wireframe) {
+               glClear(GL_DEPTH_BUFFER_BIT);
                glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
                roam_sphere_draw(self->sphere);
        }
@@ -441,13 +441,12 @@ static void on_view_changed(GisOpenGL *self,
                gdouble _1, gdouble _2, gdouble _3)
 {
        g_debug("GisOpenGL: on_view_changed");
-       gdk_threads_enter();
        _set_visuals(self);
 #ifndef ROAM_DEBUG
-       g_idle_add_full(G_PRIORITY_HIGH_IDLE+30, _update_errors_cb, self->sphere, NULL);
+       self->ue_source = g_idle_add_full(G_PRIORITY_HIGH_IDLE+30,
+                       _update_errors_cb, self->sphere, NULL);
        //roam_sphere_update_errors(self->sphere);
 #endif
-       gdk_threads_leave();
 }
 
 static gboolean on_idle(GisOpenGL *self)
@@ -614,13 +613,6 @@ static void gis_opengl_init(GisOpenGL *self)
                g_error("GL lacks required capabilities");
        g_object_unref(glconfig);
 
-       gtk_widget_set_size_request(GTK_WIDGET(self), 600, 550);
-       gtk_widget_set_events(GTK_WIDGET(self),
-                       GDK_BUTTON_PRESS_MASK |
-                       GDK_ENTER_NOTIFY_MASK |
-                       GDK_KEY_PRESS_MASK);
-       g_object_set(self, "can-focus", TRUE, NULL);
-
        self->objects = g_tree_new_full(_objects_cmp, NULL, NULL, _objects_free);
        self->sphere = roam_sphere_new(self);
        self->sphere_lock = g_mutex_new();
@@ -630,6 +622,7 @@ static void gis_opengl_init(GisOpenGL *self)
        self->sm_source[1] = g_timeout_add_full(G_PRIORITY_HIGH_IDLE+10, 500, (GSourceFunc)on_idle, self, NULL);
 #endif
 
+       gtk_widget_add_events(GTK_WIDGET(self), GDK_KEY_PRESS_MASK);
        g_signal_connect(self, "realize",          G_CALLBACK(on_realize),      NULL);
        g_signal_connect(self, "configure-event",  G_CALLBACK(on_configure),    NULL);
        g_signal_connect(self, "expose-event",     G_CALLBACK(on_expose),       NULL);
@@ -651,6 +644,10 @@ static void gis_opengl_dispose(GObject *_self)
                g_source_remove(self->sm_source[1]);
                self->sm_source[1] = 0;
        }
+       if (self->ue_source) {
+               g_source_remove(self->ue_source);
+               self->ue_source = 0;
+       }
        G_OBJECT_CLASS(gis_opengl_parent_class)->dispose(_self);
 }
 static void gis_opengl_finalize(GObject *_self)