mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-18 09:00:34 +00:00
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.
This commit is contained in:
parent
5f14630b76
commit
ad30262fef
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user