[gtk+] GtkGLArea: Always destroy context on unrealize
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GtkGLArea: Always destroy context on unrealize
- Date: Thu, 30 Oct 2014 11:43:35 +0000 (UTC)
commit ad30262fef6b1977b08b4f84749183c6fbbe7fa8
Author: Alexander Larsson <alexl redhat com>
Date: Thu Oct 30 12:08:31 2014 +0100
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 files changed, 4 insertions(+), 13 deletions(-)
---
diff --git a/gtk/gtkglarea.c b/gtk/gtkglarea.c
index b9204f0..5d4cac3 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);
@@ -380,23 +383,11 @@ gtk_gl_area_draw (GtkWidget *widget,
}
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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]