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.
This commit is contained in:
Peter Bloomfield 2022-04-30 12:59:48 -04:00
parent a5d208adaf
commit 54d319bc32

View File

@ -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;
if (def->empty.ref_count > 0)
empty_def = (GtkImageDefinitionEmpty *) def;
empty_def->ref_count--;
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;
}