From ad30262fef6b1977b08b4f84749183c6fbbe7fa8 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Thu, 30 Oct 2014 12:08:31 +0100 Subject: [PATCH] GtkGLArea: Always destroy context on unrealize We had some code that tried to reuse the context over realize, but that doesn't work as we need to share with the possibly new paint context of the re-realized window. --- gtk/gtkglarea.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/gtk/gtkglarea.c b/gtk/gtkglarea.c index b9204f0c7a..5d4cac3203 100644 --- a/gtk/gtkglarea.c +++ b/gtk/gtkglarea.c @@ -247,7 +247,10 @@ gtk_gl_area_unrealize (GtkWidget *widget) else g_warning ("can't free framebuffer"); - gdk_gl_context_clear_current (); + /* Make sure to destroy if current */ + g_object_run_dispose (G_OBJECT (priv->context)); + g_object_unref (priv->context); + priv->context = NULL; } g_clear_error (&priv->error); @@ -379,24 +382,12 @@ gtk_gl_area_draw (GtkWidget *widget, return TRUE; } -static void -gtk_gl_area_screen_changed (GtkWidget *widget, - GdkScreen *old_screen) -{ - GtkGLArea *self = GTK_GL_AREA (widget); - GtkGLAreaPrivate *priv = gtk_gl_area_get_instance_private (self); - - /* this will cause the context to be recreated on realize */ - g_clear_object (&priv->context); -} - static void gtk_gl_area_class_init (GtkGLAreaClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - widget_class->screen_changed = gtk_gl_area_screen_changed; widget_class->realize = gtk_gl_area_realize; widget_class->unrealize = gtk_gl_area_unrealize; widget_class->size_allocate = gtk_gl_area_size_allocate;