From 065b8698dcb8e5dcba83401f3464eb5cfbcdf456 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Dzi=C4=99giel?= Date: Mon, 8 Dec 2025 19:55:38 +0100 Subject: [PATCH] clapper-gtk: video: Fix sink property type checks Sometimes property might return a subclass type when object is subclassed. This especially happens with custom GdkPaintable implementations. For this reason instead of comparing object type, check if it inherits what we want. --- src/lib/clapper-gtk/clapper-gtk-video.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/lib/clapper-gtk/clapper-gtk-video.c b/src/lib/clapper-gtk/clapper-gtk-video.c index 1b83c0b8..7b1b666c 100644 --- a/src/lib/clapper-gtk/clapper-gtk-video.c +++ b/src/lib/clapper-gtk/clapper-gtk-video.c @@ -777,20 +777,23 @@ _get_widget_from_video_sink (GstElement *vsink) GParamSpec *pspec; if ((pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (vsink), "widget")) - && pspec->value_type == GTK_TYPE_WIDGET) { + && g_type_is_a (pspec->value_type, GTK_TYPE_WIDGET)) { GST_DEBUG ("Video sink provides a widget"); g_object_get (vsink, "widget", &widget, NULL); } else if ((pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (vsink), "paintable")) - && pspec->value_type == GDK_TYPE_PAINTABLE) { - GdkPaintable *paintable = NULL; + && g_type_is_a (pspec->value_type, G_TYPE_OBJECT)) { + GObject *paintable = NULL; GST_DEBUG ("Video sink provides a paintable"); g_object_get (vsink, "paintable", &paintable, NULL); - widget = g_object_ref_sink (gtk_picture_new ()); - gtk_picture_set_paintable (GTK_PICTURE (widget), paintable); - - g_object_unref (paintable); + if (G_LIKELY (paintable != NULL)) { + if (GDK_IS_PAINTABLE (paintable)) { + widget = g_object_ref_sink (gtk_picture_new ()); + gtk_picture_set_paintable (GTK_PICTURE (widget), GDK_PAINTABLE (paintable)); + } + g_object_unref (paintable); + } } return widget;