Compare commits

...

2 Commits

Author SHA1 Message Date
Matthias Clasen
996798b901 image: Stop using gtk_image_clear in finalize
This causes criticals with recent glib.
So do the same things clear() does, manually.
2023-02-19 12:44:30 -05:00
Julian Sparber
9d6a67e3bf gtk-builder-tool-validate: Use GtkBuilder to find parent class
This allows `LD_PRELOAD` to be used to load an additional libarary, and
therefore it's possible to validate composite templates that subclass a
class that's not part of gtk.
2022-10-05 16:02:00 +02:00
2 changed files with 31 additions and 6 deletions

View File

@@ -290,12 +290,35 @@ gtk_image_init (GtkImage *image)
image->icon_helper = gtk_icon_helper_new (widget_node, GTK_WIDGET (image));
}
static void gtk_image_paintable_invalidate_contents (GdkPaintable *paintable,
GtkImage *image);
static void gtk_image_paintable_invalidate_size (GdkPaintable *paintable,
GtkImage *image);
static void
gtk_image_finalize (GObject *object)
{
GtkImage *image = GTK_IMAGE (object);
gtk_image_clear (image);
g_free (image->filename);
g_free (image->resource_path);
if (_gtk_icon_helper_get_storage_type (image->icon_helper) == GTK_IMAGE_PAINTABLE)
{
GdkPaintable *paintable = _gtk_icon_helper_peek_paintable (image->icon_helper);
const guint flags = gdk_paintable_get_flags (paintable);
if ((flags & GDK_PAINTABLE_STATIC_CONTENTS) == 0)
g_signal_handlers_disconnect_by_func (paintable,
gtk_image_paintable_invalidate_contents,
image);
if ((flags & GDK_PAINTABLE_STATIC_SIZE) == 0)
g_signal_handlers_disconnect_by_func (paintable,
gtk_image_paintable_invalidate_size,
image);
}
g_clear_object (&image->icon_helper);

View File

@@ -31,13 +31,14 @@
#include "gtk-builder-tool.h"
static GType
make_fake_type (const char *type_name,
make_fake_type (GtkBuilder *builder,
const char *type_name,
const char *parent_name)
{
GType parent_type;
GTypeQuery query;
parent_type = g_type_from_name (parent_name);
parent_type = gtk_builder_get_type_from_name (builder, parent_name);
if (parent_type == G_TYPE_INVALID)
{
g_printerr ("Failed to lookup template parent type %s\n", parent_name);
@@ -65,12 +66,14 @@ do_validate_template (const char *filename,
GError *error = NULL;
int ret;
builder = gtk_builder_new ();
/* Only make a fake type if it doesn't exist yet.
* This lets us e.g. validate the GtkFileChooserWidget template.
*/
template_type = g_type_from_name (type_name);
template_type = gtk_builder_get_type_from_name (builder, type_name);
if (template_type == G_TYPE_INVALID)
template_type = make_fake_type (type_name, parent_name);
template_type = make_fake_type (builder, type_name, parent_name);
object = g_object_new (template_type, NULL);
if (!object)
@@ -79,7 +82,6 @@ do_validate_template (const char *filename,
exit (1);
}
builder = gtk_builder_new ();
ret = gtk_builder_extend_with_template (builder, object , template_type, " ", 1, &error);
if (ret)
ret = gtk_builder_add_from_file (builder, filename, &error);