diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2010-02-18 02:11:37 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2010-02-18 02:22:13 +0800 |
commit | 3e40ee35807042c5dc07f4ed8dbe83bfda8bfc5f (patch) | |
tree | 7814c18da7991f2768a30cdac07f4a782c09915a | |
parent | 067f8340086440a6625159914315c3aa8116125d (diff) | |
download | gsoc2013-evolution-3e40ee35807042c5dc07f4ed8dbe83bfda8bfc5f.tar gsoc2013-evolution-3e40ee35807042c5dc07f4ed8dbe83bfda8bfc5f.tar.gz gsoc2013-evolution-3e40ee35807042c5dc07f4ed8dbe83bfda8bfc5f.tar.bz2 gsoc2013-evolution-3e40ee35807042c5dc07f4ed8dbe83bfda8bfc5f.tar.lz gsoc2013-evolution-3e40ee35807042c5dc07f4ed8dbe83bfda8bfc5f.tar.xz gsoc2013-evolution-3e40ee35807042c5dc07f4ed8dbe83bfda8bfc5f.tar.zst gsoc2013-evolution-3e40ee35807042c5dc07f4ed8dbe83bfda8bfc5f.zip |
Forgot to disconnect a signal handler in EAttachmentButton.
The "deactivate" handler for EAttachmentButton's popup menu was never
disconnected, and I suspect it may be getting invoked after the button
has been finalized.
-rw-r--r-- | widgets/misc/e-attachment-button.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/widgets/misc/e-attachment-button.c b/widgets/misc/e-attachment-button.c index 1cd517d3e2..d2e5547165 100644 --- a/widgets/misc/e-attachment-button.c +++ b/widgets/misc/e-attachment-button.c @@ -41,6 +41,7 @@ struct _EAttachmentButtonPrivate { GtkWidget *expand_button; GtkWidget *toggle_button; GtkWidget *cell_view; + GtkWidget *popup_menu; guint expandable : 1; guint expanded : 1; @@ -274,17 +275,21 @@ static void attachment_button_set_view (EAttachmentButton *button, EAttachmentView *view) { - GtkWidget *menu; + GtkWidget *popup_menu; g_return_if_fail (button->priv->view == NULL); button->priv->view = g_object_ref (view); - menu = e_attachment_view_get_popup_menu (view); + popup_menu = e_attachment_view_get_popup_menu (view); g_signal_connect_swapped ( - menu, "deactivate", + popup_menu, "deactivate", G_CALLBACK (attachment_button_menu_deactivate_cb), button); + + /* Keep a reference to the popup menu so we can + * disconnect the signal handler in dispose(). */ + button->priv->popup_menu = g_object_ref (popup_menu); } static void @@ -396,6 +401,14 @@ attachment_button_dispose (GObject *object) priv->cell_view = NULL; } + if (priv->popup_menu != NULL) { + g_signal_handlers_disconnect_matched ( + priv->popup_menu, G_SIGNAL_MATCH_DATA, + 0, 0, NULL, NULL, object); + g_object_unref (priv->popup_menu); + priv->popup_menu = NULL; + } + /* Chain up to parent's dispose() method. */ G_OBJECT_CLASS (parent_class)->dispose (object); } |