diff options
author | Thomas Wood <thomas.wood@intel.com> | 2010-06-28 18:06:33 +0100 |
---|---|---|
committer | Thomas Wood <thomas.wood@intel.com> | 2010-06-28 18:06:33 +0100 |
commit | 89e778c362cdb1ed0a2f6ece855fd9d1e03ba043 (patch) | |
tree | 184be3f4c6d7386eeb02c385b1193990749c748f | |
parent | 5ed92c674ee3edd09569cc1f50aa50336cc93869 (diff) | |
download | gnome-control-center-wip/datetime-panel.tar.gz |
datetime: get the current system timezone and show it on the map at startupwip/datetime-panel
-rw-r--r-- | panels/datetime/cc-datetime-panel.c | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/panels/datetime/cc-datetime-panel.c b/panels/datetime/cc-datetime-panel.c index 48e71d0e0..dad4919c9 100644 --- a/panels/datetime/cc-datetime-panel.c +++ b/panels/datetime/cc-datetime-panel.c @@ -32,6 +32,9 @@ G_DEFINE_DYNAMIC_TYPE (CcDateTimePanel, cc_date_time_panel, CC_TYPE_PANEL) struct _CcDateTimePanelPrivate { GtkBuilder *builder; + GtkWidget *map; + + TzLocation *current_location; guint timeout; }; @@ -133,8 +136,8 @@ update_time (CcDateTimePanel *self) } static void -cb (CcDateTimePanel *self, - GError *error) +set_time_cb (CcDateTimePanel *self, + GError *error) { /* TODO: display any error in a user friendly way */ if (error) @@ -144,6 +147,17 @@ cb (CcDateTimePanel *self, } static void +set_timezone_cb (CcDateTimePanel *self, + GError *error) +{ + /* TODO: display any error in a user friendly way */ + if (error) + { + g_warning ("Could not set system timezone: %s", error->message); + } +} + +static void apply_button_clicked_cb (GtkButton *button, CcDateTimePanel *self) { @@ -152,6 +166,7 @@ apply_button_clicked_cb (GtkButton *button, guint h, mon, s, y, min, d; struct tm fulltime; time_t unixtime; + gchar *filename; widget = (GtkWidget *) gtk_builder_get_object (priv->builder, "spin_hour"); h = gtk_spin_button_get_value (GTK_SPIN_BUTTON (widget)); @@ -174,8 +189,11 @@ apply_button_clicked_cb (GtkButton *button, unixtime = mktime (&fulltime); - set_system_time_async (unixtime, (GFunc) cb, self, NULL); + set_system_time_async (unixtime, (GFunc) set_time_cb, self, NULL); + filename = g_build_filename (SYSTEM_ZONEINFODIR, priv->current_location->zone, + NULL); + set_system_timezone_async (filename, (GFunc) set_timezone_cb, self, NULL); } static void @@ -190,6 +208,8 @@ location_changed_cb (CcTimezoneMap *map, struct tm *ltime; gchar slabel[32]; + priv->current_location = location; + label = (GtkWidget *) gtk_builder_get_object (self->priv->builder, "label_current_location"); @@ -227,6 +247,17 @@ location_changed_cb (CcTimezoneMap *map, } static void +get_timezone_cb (CcDateTimePanel *self, + const gchar *timezone, + GError *error) +{ + if (error) + g_warning ("Could not get current timezone: %s", error->message); + else + cc_timezone_map_set_timezone (CC_TIMEZONE_MAP (self->priv->map), timezone); +} + +static void cc_date_time_panel_init (CcDateTimePanel *self) { CcDateTimePanelPrivate *priv; @@ -252,7 +283,7 @@ cc_date_time_panel_init (CcDateTimePanel *self) return; } - widget = (GtkWidget *) cc_timezone_map_new (); + priv->map = widget = (GtkWidget *) cc_timezone_map_new (); g_signal_connect (widget, "location-changed", G_CALLBACK (location_changed_cb), self); gtk_widget_show (widget); @@ -288,6 +319,8 @@ cc_date_time_panel_init (CcDateTimePanel *self) "clicked", G_CALLBACK (apply_button_clicked_cb), self); + + get_system_timezone_async ((GetTimezoneFunc) get_timezone_cb, self, NULL); } void |