88 lines
3.1 KiB
Diff
88 lines
3.1 KiB
Diff
|
From 54d319bc32bc2c6ac6c77671bfd419bdeff6edcb Mon Sep 17 00:00:00 2001
|
||
|
From: Peter Bloomfield <PeterBloomfield@bellsouth.net>
|
||
|
Date: Sat, 30 Apr 2022 12:59:48 -0400
|
||
|
Subject: [PATCH 2/2] 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.
|
||
|
---
|
||
|
gtk/gtkimagedefinition.c | 35 ++++++++++++++++++++++++++---------
|
||
|
1 file 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;
|
||
|
}
|
||
|
|
||
|
--
|
||
|
2.38.0
|
||
|
|