[gtk] scaler: Avoid some signal connections
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk] scaler: Avoid some signal connections
- Date: Thu, 15 Aug 2019 15:23:28 +0000 (UTC)
commit d2f76d689f9bf0819b929953fd88bc81b6ee583f
Author: Timm Bäder <mail baedert org>
Date: Thu Aug 15 17:12:30 2019 +0200
scaler: Avoid some signal connections
We're mainly using this for icons that will never change contents or
size, and we're using a GtkScaler per such icon when on a hidpi setup,
so just avoid the two signal connections per icon.
gtk/gtkscaler.c | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
---
diff --git a/gtk/gtkscaler.c b/gtk/gtkscaler.c
index 3824635bf2..c07a083f36 100644
--- a/gtk/gtkscaler.c
+++ b/gtk/gtkscaler.c
@@ -122,8 +122,14 @@ gtk_scaler_dispose (GObject *object)
if (self->paintable)
{
- g_signal_handlers_disconnect_by_func (self->paintable, gdk_paintable_invalidate_contents, self);
- g_signal_handlers_disconnect_by_func (self->paintable, gdk_paintable_invalidate_size, self);
+ const guint flags = gdk_paintable_get_flags (self->paintable);
+
+ if ((flags & GDK_PAINTABLE_STATIC_CONTENTS) == 0)
+ g_signal_handlers_disconnect_by_func (self->paintable, gdk_paintable_invalidate_contents, self);
+
+ if ((flags & GDK_PAINTABLE_STATIC_SIZE) == 0)
+ g_signal_handlers_disconnect_by_func (self->paintable, gdk_paintable_invalidate_size, self);
+
g_clear_object (&self->paintable);
}
@@ -149,6 +155,7 @@ gtk_scaler_new (GdkPaintable *paintable,
double scale_factor)
{
GtkScaler *self;
+ guint flags;
g_return_val_if_fail (GDK_IS_PAINTABLE (paintable), NULL);
g_return_val_if_fail (scale_factor > 0.0, NULL);
@@ -156,8 +163,14 @@ gtk_scaler_new (GdkPaintable *paintable,
self = g_object_new (GTK_TYPE_SCALER, NULL);
self->paintable = g_object_ref (paintable);
- g_signal_connect_swapped (paintable, "invalidate-contents", G_CALLBACK
(gdk_paintable_invalidate_contents), self);
- g_signal_connect_swapped (paintable, "invalidate-size", G_CALLBACK (gdk_paintable_invalidate_size), self);
+ flags = gdk_paintable_get_flags (paintable);
+
+ if ((flags & GDK_PAINTABLE_STATIC_CONTENTS) == 0)
+ g_signal_connect_swapped (paintable, "invalidate-contents", G_CALLBACK
(gdk_paintable_invalidate_contents), self);
+
+ if ((flags & GDK_PAINTABLE_STATIC_SIZE) == 0)
+ g_signal_connect_swapped (paintable, "invalidate-size", G_CALLBACK (gdk_paintable_invalidate_size),
self);
+
self->scale_factor = scale_factor;
return GDK_PAINTABLE (self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]