diff options
-rw-r--r-- | widgets/ChangeLog | 7 | ||||
-rw-r--r-- | widgets/e-timezone-dialog/e-timezone-dialog.c | 17 |
2 files changed, 24 insertions, 0 deletions
diff --git a/widgets/ChangeLog b/widgets/ChangeLog index 0b349a6114..0f342e3c05 100644 --- a/widgets/ChangeLog +++ b/widgets/ChangeLog @@ -1,3 +1,10 @@ +2006-08-20 Jeff Cai <jeff.cai@sun.com> + + * e-timezone-dialog/e-timezone-dialog.c: + (e_timezone_dialog_construct), (e_timezone_dialog_reparent), + (map_destroy_cb): + Fixes 350559. Disable timeout function when the map is destroyed. + 2006-07-21 Hiroyuki Ikezoe <poincare@ikezoe.net> ** Fixes 342313. diff --git a/widgets/e-timezone-dialog/e-timezone-dialog.c b/widgets/e-timezone-dialog/e-timezone-dialog.c index fa2961530c..66bd67bc46 100644 --- a/widgets/e-timezone-dialog/e-timezone-dialog.c +++ b/widgets/e-timezone-dialog/e-timezone-dialog.c @@ -110,6 +110,8 @@ static void set_map_timezone (ETimezoneDialog *etd, icaltimezone *zone); static void on_combo_changed (GtkEditable *entry, ETimezoneDialog *etd); +static void map_destroy_cb (gpointer data, + GObject *where_object_was); G_DEFINE_TYPE (ETimezoneDialog, e_timezone_dialog, G_TYPE_OBJECT) @@ -268,6 +270,9 @@ e_timezone_dialog_construct (ETimezoneDialog *etd) priv->map = e_map_new (); map = GTK_WIDGET (priv->map); + + g_object_weak_ref(G_OBJECT(map), map_destroy_cb, priv); + gtk_widget_set_events (map, gtk_widget_get_events (map) | GDK_LEAVE_NOTIFY_MASK | GDK_VISIBILITY_NOTIFY_MASK); @@ -785,3 +790,15 @@ e_timezone_dialog_reparent (ETimezoneDialog *etd, gtk_widget_reparent (priv->table, new_parent); } + +static void +map_destroy_cb(gpointer data, GObject *where_object_was) +{ + + ETimezoneDialogPrivate *priv = data; + if (priv->timeout_id) { + g_source_remove(priv->timeout_id); + priv->timeout_id = 0; + } + return; +} |