From: Enrico Tröger Date: Mon, 1 Jun 2009 01:43:36 +0000 (+0200) Subject: Disconnect boolean and string property proxy callbacks on destroy X-Git-Url: https://spindle.queued.net/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c182e4f78845ee09712fe565a6613544f0c68021;p=midori 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. --- 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)