aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog6
-rw-r--r--calendar/gui/gnome-cal.c21
2 files changed, 26 insertions, 1 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index 780dd268f1..aa7b0cd682 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,3 +1,9 @@
+2006-11-14 Harish Krishnaswamy <kharish@novell.com>
+
+ * gui/gnome-cal.c: (gnome_calendar_destroy):
+ Disconnect signal handlers before gcal is destroyed.
+ Fixes #208959 (bugzilla.novell.com).
+
2006-11-07 Chenthill Palanisamy <pchenthill@novell.com>
* gui/alarm-notify/alarm-notify.c: (list_changed_cb),
diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c
index f0f240c172..b58a75bc08 100644
--- a/calendar/gui/gnome-cal.c
+++ b/calendar/gui/gnome-cal.c
@@ -1719,6 +1719,7 @@ gnome_calendar_destroy (GtkObject *object)
GnomeCalendar *gcal;
GnomeCalendarPrivate *priv;
gchar *filename;
+ ECalModel *cal_model;
g_return_if_fail (object != NULL);
g_return_if_fail (GNOME_IS_CALENDAR (object));
@@ -1774,7 +1775,7 @@ gnome_calendar_destroy (GtkObject *object)
calendar_config_remove_notification (GPOINTER_TO_UINT (l->data));
g_list_free (priv->notifications);
priv->notifications = NULL;
-
+
/* Save the TaskPad layout. */
filename = g_build_filename (calendar_component_peek_config_directory (calendar_component_peek ()),
"TaskPad", NULL);
@@ -1847,6 +1848,24 @@ gnome_calendar_destroy (GtkObject *object)
g_object_unref (priv->memopad_menu);
priv->memopad_menu = NULL;
}
+ /* Disconnect all handlers */
+ cal_model = e_calendar_view_get_model ((ECalendarView *)priv->week_view);
+ g_signal_handlers_disconnect_by_func (cal_model,
+ G_CALLBACK (view_progress_cb), gcal);
+ g_signal_handlers_disconnect_by_func (cal_model,
+ G_CALLBACK (view_done_cb), gcal);
+
+ cal_model = e_calendar_table_get_model ((ECalendarTable *) priv->todo);
+ g_signal_handlers_disconnect_by_func (cal_model,
+ G_CALLBACK (view_progress_cb), gcal);
+ g_signal_handlers_disconnect_by_func (cal_model,
+ G_CALLBACK (view_done_cb), gcal);
+
+ cal_model = e_memo_table_get_model ((EMemoTable *)priv->memo);
+ g_signal_handlers_disconnect_by_func (cal_model,
+ G_CALLBACK (view_progress_cb), gcal);
+ g_signal_handlers_disconnect_by_func (cal_model,
+ G_CALLBACK (view_done_cb), gcal);
g_free (priv);
gcal->priv = NULL;