static void get_initial_timezone (CcDateTimePanel *self) { const gchar *timezone; timezone = timedate1_get_timezone (self->priv->dtm); if (timezone == NULL || !cc_timezone_map_set_timezone (CC_TIMEZONE_MAP (self->priv->map), timezone)) { g_warning ("Timezone '%s' is unhandled, setting %s as default", timezone ? timezone : "(null)", DEFAULT_TZ); cc_timezone_map_set_timezone (CC_TIMEZONE_MAP (self->priv->map), DEFAULT_TZ); } self->priv->current_location = cc_timezone_map_get_location (CC_TIMEZONE_MAP (self->priv->map)); update_timezone (self); }
static void city_changed_cb (GtkComboBox *box, CcDateTimePanel *self) { static gboolean inside = FALSE; GtkTreeIter iter; gchar *zone; /* prevent re-entry from location changed callback */ if (inside) return; inside = TRUE; if (gtk_combo_box_get_active_iter (box, &iter)) { gtk_tree_model_get (gtk_combo_box_get_model (box), &iter, CITY_COL_ZONE, &zone, -1); cc_timezone_map_set_timezone (CC_TIMEZONE_MAP (self->priv->map), zone); g_free (zone); } inside = FALSE; }
static void get_timezone_cb (GObject *source, GAsyncResult *res, gpointer user_data) { CcDateTimePanel *self = user_data; GtkWidget *widget; gchar *timezone; GError *error; error = NULL; if (!date_time_mechanism_call_get_timezone_finish (self->priv->dtm, &timezone, res, &error)) { g_warning ("Could not get current timezone: %s", error->message); g_error_free (error); } else { if (!cc_timezone_map_set_timezone (CC_TIMEZONE_MAP (self->priv->map), timezone)) { g_warning ("Timezone '%s' is unhandled, setting %s as default", timezone, DEFAULT_TZ); cc_timezone_map_set_timezone (CC_TIMEZONE_MAP (self->priv->map), DEFAULT_TZ); } self->priv->current_location = cc_timezone_map_get_location (CC_TIMEZONE_MAP (self->priv->map)); update_timezone (self); } /* now that the initial state is loaded set connect the signals */ widget = (GtkWidget*) gtk_builder_get_object (self->priv->builder, "region_combobox"); g_signal_connect (widget, "changed", G_CALLBACK (region_changed_cb), self); widget = (GtkWidget*) gtk_builder_get_object (self->priv->builder, "city_combobox"); g_signal_connect (widget, "changed", G_CALLBACK (city_changed_cb), self); g_signal_connect (self->priv->map, "location-changed", G_CALLBACK (location_changed_cb), self); g_free (timezone); }
static gboolean city_changed_cb (GtkEntryCompletion *entry_completion, GtkTreeModel *model, GtkTreeIter *iter, CcDateTimePanel *self) { GtkWidget *entry; gchar *zone; gtk_tree_model_get (model, iter, CITY_COL_ZONE, &zone, -1); cc_timezone_map_set_timezone (CC_TIMEZONE_MAP (self->priv->map), zone); g_free (zone); entry = gtk_entry_completion_get_entry (GTK_ENTRY_COMPLETION (entry_completion)); gtk_entry_set_text (GTK_ENTRY (entry), ""); return TRUE; }