aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/e-timezone-dialog
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/e-timezone-dialog')
-rw-r--r--widgets/e-timezone-dialog/e-timezone-dialog.c17
1 files changed, 17 insertions, 0 deletions
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;
+}