From: Matthias Clasen Date: Wed, 10 May 2023 20:55:16 +0000 (-0400) Subject: gsk: Fix some renderer gotchas X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~280^2~5 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=aee214b09d41a481cfa1e26aa777b8f5da59e183;p=gtk4.git gsk: Fix some renderer gotchas unrealize() needs to clean up the surface that was set in realize(), and both need to emit property change notification. --- 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"); } /**