Index: gailbutton.c
===================================================================
RCS file: /cvs/gnome/gail/gail/gailbutton.c,v
retrieving revision 1.75
diff -u -p -r1.75 gailbutton.c
--- gailbutton.c	20 Aug 2004 07:23:28 -0000	1.75
+++ gailbutton.c	22 Aug 2005 15:20:04 -0000
@@ -409,6 +409,24 @@ gail_button_notify_label_gtk (GObject   
 }
 
 static void
+gail_button_notify_weak_ref (gpointer data, GObject* obj)
+{
+  GtkLabel *label = NULL;
+
+  AtkObject* atk_obj = ATK_OBJECT (obj);
+  if (data && GTK_IS_WIDGET (data))
+    {
+      label = GTK_LABEL (data);
+      if (label)
+	{
+	  g_signal_handlers_disconnect_by_func (label,
+						(GCallback) gail_button_notify_label_gtk,
+						GAIL_BUTTON (atk_obj));
+	}
+    }
+}
+
+static void
 gail_button_init_textutil (GailButton  *button,
                            GtkWidget   *label)
 {
@@ -417,6 +435,9 @@ gail_button_init_textutil (GailButton  *
   button->textutil = gail_text_util_new ();
   label_text = gtk_label_get_text (GTK_LABEL (label));
   gail_text_util_text_setup (button->textutil, label_text);
+  g_object_weak_ref (G_OBJECT (ATK_OBJECT (button)), 
+		     gail_button_notify_weak_ref, label);
+
   g_signal_connect (label,
                     "notify",
                     (GCallback) gail_button_notify_label_gtk,
