From c182e4f78845ee09712fe565a6613544f0c68021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrico=20Tr=C3=B6ger?= Date: Mon, 1 Jun 2009 03:43:36 +0200 Subject: [PATCH] Disconnect boolean and string property proxy callbacks on destroy This fixes critical warnings seen when opening and closing multiple windows, which led notification callbacks to be invoked on invalid widgets. --- katze/katze-utils.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/katze/katze-utils.c b/katze/katze-utils.c index 54969ea6..42e87031 100644 --- a/katze/katze-utils.c +++ b/katze/katze-utils.c @@ -129,6 +129,22 @@ proxy_object_notify_string_cb (GObject* object, g_free (value); } +static void +proxy_widget_boolean_destroy_cb (GtkWidget* proxy, + GObject* object) +{ + g_signal_handlers_disconnect_by_func (object, + proxy_object_notify_boolean_cb, proxy); +} + +static void +proxy_widget_string_destroy_cb (GtkWidget* proxy, + GObject* object) +{ + g_signal_handlers_disconnect_by_func (object, + proxy_object_notify_string_cb, proxy); +} + /** * katze_property_proxy: * @object: a #GObject @@ -208,6 +224,8 @@ katze_property_proxy (gpointer object, notify_property = g_strdup_printf ("notify::%s", property); g_signal_connect (object, notify_property, G_CALLBACK (proxy_object_notify_boolean_cb), widget); + g_signal_connect (widget, "destroy", + G_CALLBACK (proxy_widget_boolean_destroy_cb), object); g_free (notify_property); } else if (type == G_TYPE_PARAM_STRING && _hint == g_intern_string ("file")) @@ -300,6 +318,8 @@ katze_property_proxy (gpointer object, notify_property = g_strdup_printf ("notify::%s", property); g_signal_connect (object, notify_property, G_CALLBACK (proxy_object_notify_string_cb), widget); + g_signal_connect (widget, "destroy", + G_CALLBACK (proxy_widget_string_destroy_cb), object); g_free (notify_property); } else if (type == G_TYPE_PARAM_FLOAT)