[evolution/gnome-3-8] ECalShellView: Disconnect "prepare-for-quit" handler on dispose().
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/gnome-3-8] ECalShellView: Disconnect "prepare-for-quit" handler on dispose().
- Date: Mon, 10 Jun 2013 20:49:15 +0000 (UTC)
commit 09d23d29592688ff192561e9e63fba3bfa23c35b
Author: Matthew Barnes <mbarnes redhat com>
Date: Mon Jun 10 16:37:03 2013 -0400
ECalShellView: Disconnect "prepare-for-quit" handler on dispose().
This is another source of crashes after creating and destroying a second
shell window. The signal handler was left connected with the destroyed
shell window as the closure.
(cherry picked from commit 54384b72172d92bb69d136b564a6096978f50695)
modules/calendar/e-cal-shell-view-private.c | 8 ++++++++
modules/calendar/e-cal-shell-view-private.h | 3 +++
modules/calendar/e-cal-shell-view.c | 6 +++++-
3 files changed, 16 insertions(+), 1 deletions(-)
---
diff --git a/modules/calendar/e-cal-shell-view-private.c b/modules/calendar/e-cal-shell-view-private.c
index dc99ff3..387906f 100644
--- a/modules/calendar/e-cal-shell-view-private.c
+++ b/modules/calendar/e-cal-shell-view-private.c
@@ -765,6 +765,13 @@ e_cal_shell_view_private_dispose (ECalShellView *cal_shell_view)
if (priv->cal_shell_content != NULL)
e_cal_shell_content_save_state (priv->cal_shell_content);
+ if (priv->prepare_for_quit_handler_id > 0) {
+ g_signal_handler_disconnect (
+ priv->shell,
+ priv->prepare_for_quit_handler_id);
+ priv->prepare_for_quit_handler_id = 0;
+ }
+
if (priv->backend_error_handler_id > 0) {
g_signal_handler_disconnect (
priv->client_cache,
@@ -776,6 +783,7 @@ e_cal_shell_view_private_dispose (ECalShellView *cal_shell_view)
g_clear_object (&priv->cal_shell_content);
g_clear_object (&priv->cal_shell_sidebar);
+ g_clear_object (&priv->shell);
g_clear_object (&priv->client_cache);
if (priv->calendar_activity != NULL) {
diff --git a/modules/calendar/e-cal-shell-view-private.h b/modules/calendar/e-cal-shell-view-private.h
index 7931eb3..30962d8 100644
--- a/modules/calendar/e-cal-shell-view-private.h
+++ b/modules/calendar/e-cal-shell-view-private.h
@@ -93,6 +93,9 @@ struct _ECalShellViewPrivate {
ECalShellContent *cal_shell_content;
ECalShellSidebar *cal_shell_sidebar;
+ EShell *shell;
+ gulong prepare_for_quit_handler_id;
+
EClientCache *client_cache;
gulong backend_error_handler_id;
diff --git a/modules/calendar/e-cal-shell-view.c b/modules/calendar/e-cal-shell-view.c
index 4b33026..69cb8ce 100644
--- a/modules/calendar/e-cal-shell-view.c
+++ b/modules/calendar/e-cal-shell-view.c
@@ -101,6 +101,7 @@ cal_shell_view_constructed (GObject *object)
ECalShellContent *cal_shell_content;
GtkWidget *container;
GtkWidget *widget;
+ gulong handler_id;
/* Chain up to parent's constructed() method. */
G_OBJECT_CLASS (parent_class)->constructed (object);
@@ -130,10 +131,13 @@ cal_shell_view_constructed (GObject *object)
gtk_container_add (GTK_CONTAINER (container), widget);
gtk_widget_show (widget);
- g_signal_connect (
+ handler_id = g_signal_connect (
shell, "prepare-for-quit",
G_CALLBACK (cal_shell_view_prepare_for_quit_cb),
cal_shell_view);
+
+ cal_shell_view->priv->shell = g_object_ref (shell);
+ cal_shell_view->priv->prepare_for_quit_handler_id = handler_id;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]