aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2010-02-18 02:11:37 +0800
committerMatthew Barnes <mbarnes@redhat.com>2010-02-18 02:22:13 +0800
commit3e40ee35807042c5dc07f4ed8dbe83bfda8bfc5f (patch)
tree7814c18da7991f2768a30cdac07f4a782c09915a
parent067f8340086440a6625159914315c3aa8116125d (diff)
downloadgsoc2013-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.c19
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);
}