+static void on_realize(GisOpenGL *opengl, gpointer _)
+{
+ g_debug("GisOpenGL: on_realize");
+
+ /* Start OpenGL */
+ GdkGLContext *glcontext = gtk_widget_get_gl_context(GTK_WIDGET(opengl));
+ GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(GTK_WIDGET(opengl));
+ if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext))
+ g_assert_not_reached();
+
+ /* Connect signals and idle functions now that opengl is fully initialized */
+ gtk_widget_add_events(GTK_WIDGET(opengl), GDK_KEY_PRESS_MASK);
+ g_signal_connect(opengl, "configure-event", G_CALLBACK(on_configure), NULL);
+ g_signal_connect(opengl, "expose-event", G_CALLBACK(on_expose), NULL);
+
+ g_signal_connect(opengl, "key-press-event", G_CALLBACK(on_key_press), NULL);
+
+ g_signal_connect(opengl, "location-changed", G_CALLBACK(on_view_changed), NULL);
+ g_signal_connect(opengl, "rotation-changed", G_CALLBACK(on_view_changed), NULL);
+
+#ifndef ROAM_DEBUG
+ opengl->sm_source[0] = g_timeout_add_full(G_PRIORITY_HIGH_IDLE+30, 33, (GSourceFunc)on_idle, opengl, NULL);
+ opengl->sm_source[1] = g_timeout_add_full(G_PRIORITY_HIGH_IDLE+10, 500, (GSourceFunc)on_idle, opengl, NULL);
+#else
+ (void)on_idle;
+ (void)_update_errors_cb;
+#endif
+
+ /* Re-queue resize incase configure was triggered before realize */
+ gtk_widget_queue_resize(GTK_WIDGET(opengl));
+}