summaryrefslogtreecommitdiff
path: root/gtk/gtkimage.c
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2018-12-30 20:37:48 +0100
committerTimm Bäder <mail@baedert.org>2018-12-31 12:44:02 +0100
commitc1e1e2da8012fcb975ddfa6170201408c2f51fc4 (patch)
treef16616741db5c3e16403288c4e245ec431b45d53 /gtk/gtkimage.c
parentea8f1469c1f109e80ef6dab12772d6339166a4d7 (diff)
downloadgtk+-c1e1e2da8012fcb975ddfa6170201408c2f51fc4.tar.gz
image: Avoid some unnecessary signal connections
Equivalent if fd9879e5ffba2c58b897155b39ff79584b3618e0 but for GtkImage.
Diffstat (limited to 'gtk/gtkimage.c')
-rw-r--r--gtk/gtkimage.c39
1 files changed, 25 insertions, 14 deletions
diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c
index 1546256341..20e9bc41e3 100644
--- a/gtk/gtkimage.c
+++ b/gtk/gtkimage.c
@@ -918,15 +918,21 @@ gtk_image_set_from_paintable (GtkImage *image,
if (paintable)
{
+ const guint flags = gdk_paintable_get_flags (paintable);
+
_gtk_icon_helper_set_paintable (priv->icon_helper, paintable);
- g_signal_connect (paintable,
- "invalidate-contents",
- G_CALLBACK (gtk_image_paintable_invalidate_contents),
- image);
- g_signal_connect (paintable,
- "invalidate-size",
- G_CALLBACK (gtk_image_paintable_invalidate_size),
- image);
+
+ if ((flags & GDK_PAINTABLE_STATIC_CONTENTS) == 0)
+ g_signal_connect (paintable,
+ "invalidate-contents",
+ G_CALLBACK (gtk_image_paintable_invalidate_contents),
+ image);
+
+ if ((flags & GDK_PAINTABLE_STATIC_SIZE) == 0)
+ g_signal_connect (paintable,
+ "invalidate-size",
+ G_CALLBACK (gtk_image_paintable_invalidate_size),
+ image);
g_object_unref (paintable);
}
@@ -1215,12 +1221,17 @@ gtk_image_clear (GtkImage *image)
if (storage_type == GTK_IMAGE_PAINTABLE)
{
GdkPaintable *paintable = _gtk_icon_helper_peek_paintable (priv->icon_helper);
- g_signal_handlers_disconnect_by_func (paintable,
- gtk_image_paintable_invalidate_contents,
- image);
- g_signal_handlers_disconnect_by_func (paintable,
- gtk_image_paintable_invalidate_size,
- image);
+ 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);
}
_gtk_icon_helper_clear (priv->icon_helper);