static void location_changed_cb (CcTimezoneMap *map, TzLocation *location, CcDateTimePanel *self) { CcDateTimePanelPrivate *priv = self->priv; GtkWidget *region_combo, *city_combo; g_debug ("location changed to %s/%s", location->country, location->zone); self->priv->current_location = location; /* Update the combo boxes */ region_combo = W("region_combobox"); city_combo = W("city_combobox"); g_signal_handlers_block_by_func (region_combo, region_changed_cb, self); g_signal_handlers_block_by_func (city_combo, city_changed_cb, self); update_timezone (self); g_signal_handlers_unblock_by_func (region_combo, region_changed_cb, self); g_signal_handlers_unblock_by_func (city_combo, city_changed_cb, self); queue_set_timezone (self); }
static void on_tz_changed (GFileMonitor *monitor, GFile *file, GFile *other_file, GFileMonitorEvent *event, gpointer user_data) { g_debug ("Updating clock because timezone changed"); update_timezone (user_data); }
static void on_clock_changed (GnomeWallClock *clock, GParamSpec *pspec, CcDateTimePanel *panel) { CcDateTimePanelPrivate *priv = panel->priv; g_date_time_unref (priv->date); priv->date = g_date_time_new_now_local (); update_time (panel); update_timezone (panel); }
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 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 void location_changed_cb (CcTimezoneMap *map, TzLocation *location, CcDateTimePanel *self) { CcDateTimePanelPrivate *priv = self->priv; GDateTime *old_date; GTimeZone *timezone; g_debug ("location changed to %s/%s", location->country, location->zone); priv->current_location = location; old_date = priv->date; timezone = g_time_zone_new (location->zone); priv->date = g_date_time_to_timezone (old_date, timezone); g_time_zone_unref (timezone); g_date_time_unref (old_date); update_timezone (self); queue_set_timezone (self); }