diff options
author | Peter Bloomfield <PeterBloomfield@bellsouth.net> | 2022-04-30 12:59:48 -0400 |
---|---|---|
committer | Peter Bloomfield <PeterBloomfield@bellsouth.net> | 2022-04-30 13:09:04 -0400 |
commit | 54d319bc32bc2c6ac6c77671bfd419bdeff6edcb (patch) | |
tree | cb4816475fec7e49c71c23471542031d46d42453 | |
parent | a5d208adafec044b2c9e36ec5eb0f43db8be0564 (diff) | |
download | gtk+-54d319bc32bc2c6ac6c77671bfd419bdeff6edcb.tar.gz |
gtkimagedefinition: Extend commit b38266c0
Similarly, uses casts in `gtk_image_definition_unref()`. Compilation
succeeds without them, unlike in `gtk_image_definition_ref()`, because
`gtk_image_definition_unref()` is not called internally, unlike
`gtk_image_definition_ref()`. But the build would fail if some function
defined in the module were changed in the future to call
`gtk_image_definition_unref()`, and we can future-proof it now. This
also removes an inconsistency in how we access the members of the union.
-rw-r--r-- | gtk/gtkimagedefinition.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/gtk/gtkimagedefinition.c b/gtk/gtkimagedefinition.c index 9ef8223911..a26d6eb15c 100644 --- a/gtk/gtkimagedefinition.c +++ b/gtk/gtkimagedefinition.c @@ -265,9 +265,19 @@ gtk_image_definition_ref (GtkImageDefinition *def) void gtk_image_definition_unref (GtkImageDefinition *def) { - def->empty.ref_count--; + GtkImageDefinitionEmpty *empty_def; + GtkImageDefinitionPixbuf *pixbuf_def; + GtkImageDefinitionAnimation *animation_def; + GtkImageDefinitionSurface *surface_def; + GtkImageDefinitionStock *stock_def; + GtkImageDefinitionIconSet *icon_set_def; + GtkImageDefinitionIconName *icon_name_def; + GtkImageDefinitionGIcon *gicon_def; + + empty_def = (GtkImageDefinitionEmpty *) def; + empty_def->ref_count--; - if (def->empty.ref_count > 0) + if (empty_def->ref_count > 0) return; switch (def->type) @@ -277,27 +287,34 @@ gtk_image_definition_unref (GtkImageDefinition *def) g_assert_not_reached (); break; case GTK_IMAGE_PIXBUF: - g_object_unref (def->pixbuf.pixbuf); + pixbuf_def = (GtkImageDefinitionPixbuf *) def; + g_object_unref (pixbuf_def->pixbuf); break; case GTK_IMAGE_ANIMATION: - g_object_unref (def->animation.animation); + animation_def = (GtkImageDefinitionAnimation *) def; + g_object_unref (animation_def->animation); break; case GTK_IMAGE_SURFACE: - cairo_surface_destroy (def->surface.surface); + surface_def = (GtkImageDefinitionSurface *) def; + cairo_surface_destroy (surface_def->surface); break; case GTK_IMAGE_STOCK: - g_free (def->stock.id); + stock_def = (GtkImageDefinitionStock *) def; + g_free (stock_def->id); break; case GTK_IMAGE_ICON_SET: + icon_set_def = (GtkImageDefinitionIconSet *) def; G_GNUC_BEGIN_IGNORE_DEPRECATIONS; - gtk_icon_set_unref (def->icon_set.icon_set); + gtk_icon_set_unref (icon_set_def->icon_set); G_GNUC_END_IGNORE_DEPRECATIONS; break; case GTK_IMAGE_ICON_NAME: - g_free (def->icon_name.icon_name); + icon_name_def = (GtkImageDefinitionIconName *) def; + g_free (icon_name_def->icon_name); break; case GTK_IMAGE_GICON: - g_object_unref (def->gicon.gicon); + gicon_def = (GtkImageDefinitionGIcon *) def; + g_object_unref (gicon_def->gicon); break; } |