diff options
-rw-r--r-- | gsk/gl/gskgldriver.c | 3 | ||||
-rw-r--r-- | gsk/gskrenderer.c | 13 |
2 files changed, 15 insertions, 1 deletions
diff --git a/gsk/gl/gskgldriver.c b/gsk/gl/gskgldriver.c index 47734b1a9a..e81502cbe7 100644 --- a/gsk/gl/gskgldriver.c +++ b/gsk/gl/gskgldriver.c @@ -264,7 +264,8 @@ gsk_gl_driver_dispose (GObject *object) g_clear_object (&self->command_queue); } - if (self->autorelease_framebuffers->len > 0) + if (self->autorelease_framebuffers != NULL && + self->autorelease_framebuffers->len > 0) { glDeleteFramebuffers (self->autorelease_framebuffers->len, (GLuint *)(gpointer)self->autorelease_framebuffers->data); diff --git a/gsk/gskrenderer.c b/gsk/gskrenderer.c index 399123bc8a..3ff7c6abdd 100644 --- a/gsk/gskrenderer.c +++ b/gsk/gskrenderer.c @@ -295,6 +295,11 @@ gsk_renderer_realize (GskRenderer *renderer, } priv->is_realized = TRUE; + + g_object_notify (G_OBJECT (renderer), "realized"); + if (surface) + g_object_notify (G_OBJECT (renderer), "surface"); + return TRUE; } @@ -308,17 +313,25 @@ void gsk_renderer_unrealize (GskRenderer *renderer) { GskRendererPrivate *priv = gsk_renderer_get_instance_private (renderer); + gboolean has_surface; g_return_if_fail (GSK_IS_RENDERER (renderer)); if (!priv->is_realized) return; + has_surface = priv->surface != NULL; + GSK_RENDERER_GET_CLASS (renderer)->unrealize (renderer); + g_clear_object (&priv->surface); g_clear_pointer (&priv->prev_node, gsk_render_node_unref); priv->is_realized = FALSE; + + g_object_notify (G_OBJECT (renderer), "realized"); + if (has_surface) + g_object_notify (G_OBJECT (renderer), "surface"); } /** |