summaryrefslogtreecommitdiff
path: root/gtk/gtklabel.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2002-09-30 20:02:00 +0000
committerOwen Taylor <otaylor@src.gnome.org>2002-09-30 20:02:00 +0000
commitd1d235adcb34fc340bf59be149142880180eb151 (patch)
tree431fe072edbd7841f038a06996fca6f9d8e63ec4 /gtk/gtklabel.c
parentee6acce7694ca86114deb8e3f17ad30d754de383 (diff)
downloadgtk+-d1d235adcb34fc340bf59be149142880180eb151.tar.gz
Make the reference to the mnemonic widget weak. (#93334, Murray Cumming)
Mon Sep 30 15:45:49 2002 Owen Taylor <otaylor@redhat.com> * gtk/gtklabel.c (gtk_label_set_mnemonic_widget): Make the reference to the mnemonic widget weak. (#93334, Murray Cumming)
Diffstat (limited to 'gtk/gtklabel.c')
-rw-r--r--gtk/gtklabel.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c
index db2d04ac78..0ca6237c5c 100644
--- a/gtk/gtklabel.c
+++ b/gtk/gtklabel.c
@@ -718,6 +718,15 @@ gtk_label_hierarchy_changed (GtkWidget *widget,
gtk_label_setup_mnemonic (label, label->mnemonic_keyval);
}
+static void
+label_mnemonic_widget_weak_notify (gpointer data,
+ GObject *where_the_object_was)
+{
+ GtkLabel *label = data;
+
+ label->mnemonic_widget = NULL;
+ g_object_notify (G_OBJECT (label), "mnemonic_widget");
+}
/**
* gtk_label_set_mnemonic_widget:
@@ -747,10 +756,14 @@ gtk_label_set_mnemonic_widget (GtkLabel *label,
g_return_if_fail (GTK_IS_WIDGET (widget));
if (label->mnemonic_widget)
- gtk_widget_unref (label->mnemonic_widget);
+ g_object_weak_unref (label->mnemonic_widget,
+ label_mnemonic_widget_weak_notify,
+ label);
label->mnemonic_widget = widget;
if (label->mnemonic_widget)
- gtk_widget_ref (label->mnemonic_widget);
+ g_object_weak_ref (label->mnemonic_widget,
+ label_mnemonic_widget_weak_notify,
+ label);
g_object_notify (G_OBJECT (label), "mnemonic_widget");
}