Bug Summary

File:ctk/ctkbuiltinicon.c
Warning:line 125, column 25
Dereference of null pointer (loaded from variable 'minimum_baseline')

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name ctkbuiltinicon.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/ctk -resource-dir /usr/lib/llvm-16/lib/clang/16 -D HAVE_CONFIG_H -I . -I .. -D G_LOG_DOMAIN="Ctk" -D G_LOG_USE_STRUCTURED=1 -D CTK_VERSION="3.25.5" -D CTK_BINARY_VERSION="3.0.0" -D CTK_COMPILATION -D CTK_PRINT_BACKEND_ENABLE_UNSUPPORTED -D CTK_LIBDIR="/usr/lib" -D CTK_LOCALEDIR="/usr/share/locale" -D CTK_DATADIR="/usr/share" -D CTK_DATA_PREFIX="/usr" -D CTK_SYSCONFDIR="/usr/etc" -D CTK_HOST="x86_64-pc-linux-gnu" -D CTK_PRINT_BACKENDS="file,cups" -D X11_DATA_PREFIX="/usr" -D ISO_CODES_PREFIX="" -I .. -I ../ctk -I .. -I ../cdk -I /usr/include/glib-2.0 -I /usr/lib/x86_64-linux-gnu/glib-2.0/include -I /usr/include/sysprof-6 -D G_ENABLE_DEBUG -D G_ENABLE_CONSISTENCY_CHECKS -D GLIB_MIN_REQUIRED_VERSION=GLIB_VERSION_2_66 -D GLIB_MAX_ALLOWED_VERSION=GLIB_VERSION_2_66 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib/x86_64-linux-gnu/glib-2.0/include -I /usr/include/sysprof-6 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/atk-1.0 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/x86_64-linux-gnu -I /usr/include/webp -I /usr/include/at-spi2-atk/2.0 -I /usr/include/at-spi-2.0 -I /usr/include/dbus-1.0 -I /usr/lib/x86_64-linux-gnu/dbus-1.0/include -I /usr/include/gio-unix-2.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/glib-2.0 -I /usr/lib/x86_64-linux-gnu/glib-2.0/include -I /usr/include/sysprof-6 -I /usr/include/pango-1.0 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/cairo -I /usr/include/pixman-1 -D PIC -internal-isystem /usr/lib/llvm-16/lib/clang/16/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir=/rootdir/ctk -ferror-limit 19 -fvisibility=hidden -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2024-09-19-173409-43638-1 -x c ctkbuiltinicon.c
1/*
2 * Copyright © 2015 Red Hat Inc.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16 *
17 * Authors: Benjamin Otte <otte@gnome.org>
18 */
19
20#include "config.h"
21
22#include "ctkbuiltiniconprivate.h"
23
24#include "ctkcssnodeprivate.h"
25#include "ctkcssnumbervalueprivate.h"
26#include "ctkrendericonprivate.h"
27
28/* CtkBuiltinIcon is a gadget implementation that is meant to replace
29 * all calls to ctk_render_ functions to render arrows, expanders, checks
30 * radios, handles, separators, etc. See the CtkCssImageBuiltinType
31 * enumeration for the full set of builtin icons that this gadget can
32 * render.
33 *
34 * Use ctk_builtin_icon_set_image to set which of the builtin icons
35 * is rendered.
36 *
37 * Use ctk_builtin_icon_set_default_size to set a non-zero default
38 * size for the icon. If you need to support a legacy size style property,
39 * use ctk_builtin_icon_set_default_size_property.
40 *
41 * Themes can override the acutal image that is used with the
42 * -ctk-icon-source property. If it is not specified, a builtin
43 * fallback is used.
44 */
45
46typedef struct _CtkBuiltinIconPrivate CtkBuiltinIconPrivate;
47struct _CtkBuiltinIconPrivate {
48 CtkCssImageBuiltinType image_type;
49 int default_size;
50 int strikethrough;
51 gboolean strikethrough_valid;
52 char * default_size_property;
53};
54
55G_DEFINE_TYPE_WITH_CODE (CtkBuiltinIcon, ctk_builtin_icon, CTK_TYPE_CSS_GADGET,static void ctk_builtin_icon_init (CtkBuiltinIcon *self); static
void ctk_builtin_icon_class_init (CtkBuiltinIconClass *klass
); static GType ctk_builtin_icon_get_type_once (void); static
gpointer ctk_builtin_icon_parent_class = ((void*)0); static gint
CtkBuiltinIcon_private_offset; static void ctk_builtin_icon_class_intern_init
(gpointer klass) { ctk_builtin_icon_parent_class = g_type_class_peek_parent
(klass); if (CtkBuiltinIcon_private_offset != 0) g_type_class_adjust_private_offset
(klass, &CtkBuiltinIcon_private_offset); ctk_builtin_icon_class_init
((CtkBuiltinIconClass*) klass); } __attribute__ ((__unused__
)) static inline gpointer ctk_builtin_icon_get_instance_private
(CtkBuiltinIcon *self) { return (((gpointer) ((guint8*) (self
) + (glong) (CtkBuiltinIcon_private_offset)))); } GType ctk_builtin_icon_get_type
(void) { static GType static_g_define_type_id = 0; if ((__extension__
({ _Static_assert (sizeof *(&static_g_define_type_id) ==
sizeof (gpointer), "Expression evaluates to false"); (void) (
0 ? (gpointer) * (&static_g_define_type_id) : ((void*)0))
; (!(__extension__ ({ _Static_assert (sizeof *(&static_g_define_type_id
) == sizeof (gpointer), "Expression evaluates to false"); __typeof__
(*(&static_g_define_type_id)) gapg_temp_newval; __typeof__
((&static_g_define_type_id)) gapg_temp_atomic = (&static_g_define_type_id
); __atomic_load (gapg_temp_atomic, &gapg_temp_newval, 5)
; gapg_temp_newval; })) && g_once_init_enter_pointer (
&static_g_define_type_id)); })) ) { GType g_define_type_id
= ctk_builtin_icon_get_type_once (); (__extension__ ({ _Static_assert
(sizeof *(&static_g_define_type_id) == sizeof (gpointer)
, "Expression evaluates to false"); 0 ? (void) (*(&static_g_define_type_id
) = (g_define_type_id)) : (void) 0; g_once_init_leave_pointer
((&static_g_define_type_id), (gpointer) (guintptr) (g_define_type_id
)); })) ; } return static_g_define_type_id; } __attribute__ (
(__noinline__)) static GType ctk_builtin_icon_get_type_once (
void) { GType g_define_type_id = g_type_register_static_simple
((ctk_css_gadget_get_type ()), g_intern_static_string ("CtkBuiltinIcon"
), sizeof (CtkBuiltinIconClass), (GClassInitFunc)(void (*)(void
)) ctk_builtin_icon_class_intern_init, sizeof (CtkBuiltinIcon
), (GInstanceInitFunc)(void (*)(void)) ctk_builtin_icon_init,
(GTypeFlags) 0); { {{ CtkBuiltinIcon_private_offset = g_type_add_instance_private
(g_define_type_id, sizeof (CtkBuiltinIconPrivate)); };} } return
g_define_type_id; }
56 G_ADD_PRIVATE (CtkBuiltinIcon))static void ctk_builtin_icon_init (CtkBuiltinIcon *self); static
void ctk_builtin_icon_class_init (CtkBuiltinIconClass *klass
); static GType ctk_builtin_icon_get_type_once (void); static
gpointer ctk_builtin_icon_parent_class = ((void*)0); static gint
CtkBuiltinIcon_private_offset; static void ctk_builtin_icon_class_intern_init
(gpointer klass) { ctk_builtin_icon_parent_class = g_type_class_peek_parent
(klass); if (CtkBuiltinIcon_private_offset != 0) g_type_class_adjust_private_offset
(klass, &CtkBuiltinIcon_private_offset); ctk_builtin_icon_class_init
((CtkBuiltinIconClass*) klass); } __attribute__ ((__unused__
)) static inline gpointer ctk_builtin_icon_get_instance_private
(CtkBuiltinIcon *self) { return (((gpointer) ((guint8*) (self
) + (glong) (CtkBuiltinIcon_private_offset)))); } GType ctk_builtin_icon_get_type
(void) { static GType static_g_define_type_id = 0; if ((__extension__
({ _Static_assert (sizeof *(&static_g_define_type_id) ==
sizeof (gpointer), "Expression evaluates to false"); (void) (
0 ? (gpointer) * (&static_g_define_type_id) : ((void*)0))
; (!(__extension__ ({ _Static_assert (sizeof *(&static_g_define_type_id
) == sizeof (gpointer), "Expression evaluates to false"); __typeof__
(*(&static_g_define_type_id)) gapg_temp_newval; __typeof__
((&static_g_define_type_id)) gapg_temp_atomic = (&static_g_define_type_id
); __atomic_load (gapg_temp_atomic, &gapg_temp_newval, 5)
; gapg_temp_newval; })) && g_once_init_enter_pointer (
&static_g_define_type_id)); })) ) { GType g_define_type_id
= ctk_builtin_icon_get_type_once (); (__extension__ ({ _Static_assert
(sizeof *(&static_g_define_type_id) == sizeof (gpointer)
, "Expression evaluates to false"); 0 ? (void) (*(&static_g_define_type_id
) = (g_define_type_id)) : (void) 0; g_once_init_leave_pointer
((&static_g_define_type_id), (gpointer) (guintptr) (g_define_type_id
)); })) ; } return static_g_define_type_id; } __attribute__ (
(__noinline__)) static GType ctk_builtin_icon_get_type_once (
void) { GType g_define_type_id = g_type_register_static_simple
((ctk_css_gadget_get_type ()), g_intern_static_string ("CtkBuiltinIcon"
), sizeof (CtkBuiltinIconClass), (GClassInitFunc)(void (*)(void
)) ctk_builtin_icon_class_intern_init, sizeof (CtkBuiltinIcon
), (GInstanceInitFunc)(void (*)(void)) ctk_builtin_icon_init,
(GTypeFlags) 0); { {{ CtkBuiltinIcon_private_offset = g_type_add_instance_private
(g_define_type_id, sizeof (CtkBuiltinIconPrivate)); };} } return
g_define_type_id; }
57
58static void
59ctk_builtin_icon_get_preferred_size (CtkCssGadget *gadget,
60 CtkOrientation orientation,
61 gint for_size G_GNUC_UNUSED__attribute__ ((__unused__)),
62 gint *minimum,
63 gint *natural,
64 gint *minimum_baseline,
65 gint *natural_baseline)
66{
67 CtkBuiltinIconPrivate *priv = ctk_builtin_icon_get_instance_private (CTK_BUILTIN_ICON (gadget)((((CtkBuiltinIcon*) (void *) g_type_check_instance_cast ((GTypeInstance
*) (gadget), ((ctk_builtin_icon_get_type ()))))))
);
68 double min_size;
69 guint property;
70
71 if (orientation == CTK_ORIENTATION_HORIZONTAL)
1
Assuming 'orientation' is not equal to CTK_ORIENTATION_HORIZONTAL
2
Taking false branch
72 property = CTK_CSS_PROPERTY_MIN_WIDTH;
73 else
74 property = CTK_CSS_PROPERTY_MIN_HEIGHT;
75 min_size = _ctk_css_number_value_get (ctk_css_style_get_value (ctk_css_gadget_get_style (gadget), property), 100);
76 if (min_size > 0.0)
3
Assuming the condition is true
4
Taking true branch
77 {
78 *minimum = *natural = min_size;
79 }
80 else if (priv->default_size_property)
81 {
82 GValue value = G_VALUE_INIT{ 0, { { 0 } } };
83
84 /* Do it a bit more complicated here so we get warnings when
85 * somebody sets a non-int proerty.
86 */
87 g_value_init (&value, G_TYPE_INT((GType) ((6) << (2))));
88 ctk_widget_style_get_property (ctk_css_gadget_get_owner (gadget),
89 priv->default_size_property,
90 &value);
91 *minimum = *natural = g_value_get_int (&value);
92 g_value_unset (&value);
93 }
94 else
95 {
96 *minimum = *natural = priv->default_size;
97 }
98
99 if (minimum_baseline)
5
Assuming 'minimum_baseline' is null
6
Taking false branch
100 {
101 if (!priv->strikethrough_valid)
102 {
103 CtkWidget *widget;
104 PangoContext *pango_context;
105 const PangoFontDescription *font_desc;
106 PangoFontMetrics *metrics;
107
108 widget = ctk_css_gadget_get_owner (gadget);
109 pango_context = ctk_widget_get_pango_context (widget);
110 font_desc = pango_context_get_font_description (pango_context);
111
112 metrics = pango_context_get_metrics (pango_context,
113 font_desc,
114 pango_context_get_language (pango_context));
115 priv->strikethrough = pango_font_metrics_get_strikethrough_position (metrics);
116 priv->strikethrough_valid = TRUE(!(0));
117
118 pango_font_metrics_unref (metrics);
119 }
120
121 *minimum_baseline = *minimum * 0.5 + PANGO_PIXELS (priv->strikethrough)(((int)(priv->strikethrough) + 512) >> 10);
122 }
123
124 if (natural_baseline)
7
Assuming 'natural_baseline' is non-null
8
Taking true branch
125 *natural_baseline = *minimum_baseline;
9
Dereference of null pointer (loaded from variable 'minimum_baseline')
126}
127
128static void
129ctk_builtin_icon_allocate (CtkCssGadget *gadget,
130 const CtkAllocation *allocation,
131 int baseline,
132 CtkAllocation *out_clip)
133{
134 CdkRectangle icon_clip;
135
136 CTK_CSS_GADGET_CLASS (ctk_builtin_icon_parent_class)((((CtkCssGadgetClass*) (void *) g_type_check_class_cast ((GTypeClass
*) (ctk_builtin_icon_parent_class), ((ctk_css_gadget_get_type
()))))))
->allocate (gadget, allocation, baseline, out_clip);
137
138 ctk_css_style_render_icon_get_extents (ctk_css_gadget_get_style (gadget),
139 &icon_clip,
140 allocation->x, allocation->y,
141 allocation->width, allocation->height);
142 cdk_rectangle_union (out_clip, &icon_clip, out_clip);
143}
144
145static gboolean
146ctk_builtin_icon_draw (CtkCssGadget *gadget,
147 cairo_t *cr,
148 int x,
149 int y,
150 int width,
151 int height)
152{
153 CtkBuiltinIconPrivate *priv = ctk_builtin_icon_get_instance_private (CTK_BUILTIN_ICON (gadget)((((CtkBuiltinIcon*) (void *) g_type_check_instance_cast ((GTypeInstance
*) (gadget), ((ctk_builtin_icon_get_type ()))))))
);
154
155 ctk_css_style_render_icon (ctk_css_gadget_get_style (gadget),
156 cr,
157 x, y,
158 width, height,
159 priv->image_type);
160
161 return FALSE(0);
162}
163
164static void
165ctk_builtin_icon_style_changed (CtkCssGadget *gadget,
166 CtkCssStyleChange *change)
167{
168 CtkBuiltinIconPrivate *priv = ctk_builtin_icon_get_instance_private (CTK_BUILTIN_ICON (gadget)((((CtkBuiltinIcon*) (void *) g_type_check_instance_cast ((GTypeInstance
*) (gadget), ((ctk_builtin_icon_get_type ()))))))
);
169
170 if (ctk_css_style_change_affects (change, CTK_CSS_AFFECTS_FONT))
171 priv->strikethrough_valid = FALSE(0);
172
173 CTK_CSS_GADGET_CLASS (ctk_builtin_icon_parent_class)((((CtkCssGadgetClass*) (void *) g_type_check_class_cast ((GTypeClass
*) (ctk_builtin_icon_parent_class), ((ctk_css_gadget_get_type
()))))))
->style_changed (gadget, change);
174}
175
176static void
177ctk_builtin_icon_finalize (GObject *object)
178{
179 CtkBuiltinIconPrivate *priv = ctk_builtin_icon_get_instance_private (CTK_BUILTIN_ICON (object)((((CtkBuiltinIcon*) (void *) g_type_check_instance_cast ((GTypeInstance
*) (object), ((ctk_builtin_icon_get_type ()))))))
);
180
181 g_free (priv->default_size_property);
182
183 G_OBJECT_CLASS (ctk_builtin_icon_parent_class)((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass
*) ((ctk_builtin_icon_parent_class)), (((GType) ((20) <<
(2))))))))
->finalize (object);
184}
185
186static void
187ctk_builtin_icon_class_init (CtkBuiltinIconClass *klass)
188{
189 CtkCssGadgetClass *gadget_class = CTK_CSS_GADGET_CLASS (klass)((((CtkCssGadgetClass*) (void *) g_type_check_class_cast ((GTypeClass
*) (klass), ((ctk_css_gadget_get_type ()))))))
;
190 GObjectClass *object_class = G_OBJECT_CLASS (klass)((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass
*) ((klass)), (((GType) ((20) << (2))))))))
;
191
192 object_class->finalize = ctk_builtin_icon_finalize;
193
194 gadget_class->get_preferred_size = ctk_builtin_icon_get_preferred_size;
195 gadget_class->allocate = ctk_builtin_icon_allocate;
196 gadget_class->draw = ctk_builtin_icon_draw;
197 gadget_class->style_changed = ctk_builtin_icon_style_changed;
198}
199
200static void
201ctk_builtin_icon_init (CtkBuiltinIcon *custom_gadget G_GNUC_UNUSED__attribute__ ((__unused__)))
202{
203}
204
205CtkCssGadget *
206ctk_builtin_icon_new_for_node (CtkCssNode *node,
207 CtkWidget *owner)
208{
209 return g_object_new (CTK_TYPE_BUILTIN_ICON(ctk_builtin_icon_get_type ()),
210 "node", node,
211 "owner", owner,
212 NULL((void*)0));
213}
214
215CtkCssGadget *
216ctk_builtin_icon_new (const char *name,
217 CtkWidget *owner,
218 CtkCssGadget *parent,
219 CtkCssGadget *next_sibling)
220{
221 CtkCssNode *node;
222 CtkCssGadget *result;
223
224 node = ctk_css_node_new ();
225 ctk_css_node_set_name (node, g_intern_string (name));
226 if (parent)
227 ctk_css_node_insert_before (ctk_css_gadget_get_node (parent),
228 node,
229 next_sibling ? ctk_css_gadget_get_node (next_sibling) : NULL((void*)0));
230
231 result = ctk_builtin_icon_new_for_node (node, owner);
232
233 g_object_unref (node);
234
235 return result;
236}
237
238void
239ctk_builtin_icon_set_image (CtkBuiltinIcon *icon,
240 CtkCssImageBuiltinType image)
241{
242 CtkBuiltinIconPrivate *priv;
243
244 g_return_if_fail (CTK_IS_BUILTIN_ICON (icon))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance
*) (icon); GType __t = ((ctk_builtin_icon_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))))) { }
else { g_return_if_fail_warning ("Ctk", ((const char*) (__func__
)), "CTK_IS_BUILTIN_ICON (icon)"); return; } } while (0)
;
245
246 priv = ctk_builtin_icon_get_instance_private (icon);
247
248 if (priv->image_type != image)
249 {
250 priv->image_type = image;
251 ctk_widget_queue_draw (ctk_css_gadget_get_owner (CTK_CSS_GADGET (icon)((((CtkCssGadget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) (icon), ((ctk_css_gadget_get_type ()))))))
));
252 }
253}
254
255CtkCssImageBuiltinType
256ctk_builtin_icon_get_image (CtkBuiltinIcon *icon)
257{
258 CtkBuiltinIconPrivate *priv;
259
260 g_return_val_if_fail (CTK_IS_BUILTIN_ICON (icon), CTK_CSS_IMAGE_BUILTIN_NONE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance
*) (icon); GType __t = ((ctk_builtin_icon_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))))) { }
else { g_return_if_fail_warning ("Ctk", ((const char*) (__func__
)), "CTK_IS_BUILTIN_ICON (icon)"); return (CTK_CSS_IMAGE_BUILTIN_NONE
); } } while (0)
;
261
262 priv = ctk_builtin_icon_get_instance_private (icon);
263
264 return priv->image_type;
265}
266
267void
268ctk_builtin_icon_set_default_size (CtkBuiltinIcon *icon,
269 int default_size)
270{
271 CtkBuiltinIconPrivate *priv;
272
273 g_return_if_fail (CTK_IS_BUILTIN_ICON (icon))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance
*) (icon); GType __t = ((ctk_builtin_icon_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))))) { }
else { g_return_if_fail_warning ("Ctk", ((const char*) (__func__
)), "CTK_IS_BUILTIN_ICON (icon)"); return; } } while (0)
;
274
275 priv = ctk_builtin_icon_get_instance_private (icon);
276
277 if (priv->default_size != default_size)
278 {
279 priv->default_size = default_size;
280 ctk_widget_queue_resize (ctk_css_gadget_get_owner (CTK_CSS_GADGET (icon)((((CtkCssGadget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) (icon), ((ctk_css_gadget_get_type ()))))))
));
281 }
282}
283
284int
285ctk_builtin_icon_get_default_size (CtkBuiltinIcon *icon)
286{
287 CtkBuiltinIconPrivate *priv;
288
289 g_return_val_if_fail (CTK_IS_BUILTIN_ICON (icon), CTK_CSS_IMAGE_BUILTIN_NONE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance
*) (icon); GType __t = ((ctk_builtin_icon_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))))) { }
else { g_return_if_fail_warning ("Ctk", ((const char*) (__func__
)), "CTK_IS_BUILTIN_ICON (icon)"); return (CTK_CSS_IMAGE_BUILTIN_NONE
); } } while (0)
;
290
291 priv = ctk_builtin_icon_get_instance_private (icon);
292
293 return priv->default_size;
294}
295
296/**
297 * ctk_builtin_icon_set_default_size_property:
298 * @icon: icon to set the property for
299 * @property_name: Name of the style property
300 *
301 * Sets the name of a widget style property to use to compute the default size
302 * of the icon. If it is set to no %NULL, it will be used instead of the value
303 * set via ctk_builtin_icon_set_default_size() to set the default size of the
304 * icon.
305 *
306 * @property_name must refer to a style property that is of integer type.
307 *
308 * This function is intended strictly for backwards compatibility reasons.
309 */
310void
311ctk_builtin_icon_set_default_size_property (CtkBuiltinIcon *icon,
312 const char *property_name)
313{
314 CtkBuiltinIconPrivate *priv;
315
316 g_return_if_fail (CTK_IS_BUILTIN_ICON (icon))do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance
*) (icon); GType __t = ((ctk_builtin_icon_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))))) { }
else { g_return_if_fail_warning ("Ctk", ((const char*) (__func__
)), "CTK_IS_BUILTIN_ICON (icon)"); return; } } while (0)
;
317
318 priv = ctk_builtin_icon_get_instance_private (icon);
319
320 if (g_strcmp0 (priv->default_size_property, property_name))
321 {
322 priv->default_size_property = g_strdup (property_name)g_strdup_inline (property_name);
323 ctk_widget_queue_resize (ctk_css_gadget_get_owner (CTK_CSS_GADGET (icon)((((CtkCssGadget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) (icon), ((ctk_css_gadget_get_type ()))))))
));
324 }
325}
326
327const char *
328ctk_builtin_icon_get_default_size_property (CtkBuiltinIcon *icon)
329{
330 CtkBuiltinIconPrivate *priv;
331
332 g_return_val_if_fail (CTK_IS_BUILTIN_ICON (icon), NULL)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance
*) (icon); GType __t = ((ctk_builtin_icon_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))))) { }
else { g_return_if_fail_warning ("Ctk", ((const char*) (__func__
)), "CTK_IS_BUILTIN_ICON (icon)"); return (((void*)0)); } } while
(0)
;
333
334 priv = ctk_builtin_icon_get_instance_private (icon);
335
336 return priv->default_size_property;
337}