aboutsummaryrefslogtreecommitdiffstats
path: root/calendar
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2009-04-25 01:11:03 +0800
committerMilan Crha <mcrha@redhat.com>2009-04-25 01:11:03 +0800
commitc33335bc72d9db97248ea5c5dc6da9cbfdb16e2c (patch)
tree4d447c8f1a02d8bc9021f6bbf1c1bf63d74fbb9e /calendar
parentf171b15d926480a4199d74f14356b7aa37b16f20 (diff)
downloadgsoc2013-evolution-c33335bc72d9db97248ea5c5dc6da9cbfdb16e2c.tar.gz
gsoc2013-evolution-c33335bc72d9db97248ea5c5dc6da9cbfdb16e2c.tar.zst
gsoc2013-evolution-c33335bc72d9db97248ea5c5dc6da9cbfdb16e2c.zip
Use system timezone in Evolution
** Fix for bug #381132
Diffstat (limited to 'calendar')
-rw-r--r--calendar/ChangeLog18
-rw-r--r--calendar/gui/apps_evolution_calendar.schemas.in12
-rw-r--r--calendar/gui/calendar-config-keys.h1
-rw-r--r--calendar/gui/calendar-config.c40
-rw-r--r--calendar/gui/calendar-config.h6
-rw-r--r--calendar/gui/dialogs/cal-prefs-dialog.c34
-rw-r--r--calendar/gui/dialogs/cal-prefs-dialog.glade206
-rw-r--r--calendar/gui/dialogs/cal-prefs-dialog.h2
8 files changed, 265 insertions, 54 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index 39de5bdd1d..6d4023c97f 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,5 +1,23 @@
2009-04-24 Milan Crha <mcrha@redhat.com>
+ ** Part of fix for bug #381132
+
+ * gui/apps_evolution_calendar.schemas.in:
+ * gui/dialogs/cal-prefs-dialog.glade:
+ * gui/dialogs/cal-prefs-dialog.h: (struct _CalendarPrefsDialog):
+ * gui/dialogs/cal-prefs-dialog.c: (update_system_tz_widgets),
+ (use_system_tz_changed), (setup_changes), (show_config),
+ (calendar_prefs_dialog_construct):
+ * gui/calendar-config-keys.h:
+ * gui/calendar-config.h:
+ * gui/calendar-config.c: (calendar_config_get_use_system_timezone),
+ (calendar_config_set_use_system_timezone),
+ (calendar_config_add_notification_use_system_timezone),
+ (calendar_config_get_timezone), (calendar_config_get_timezone_stored):
+ Be able to set system timezone as calendar's time zone.
+
+2009-04-24 Milan Crha <mcrha@redhat.com>
+
** Fix for bug #205804
* gui/e-calendar-view.c: (e_calendar_view_get_tooltips):
diff --git a/calendar/gui/apps_evolution_calendar.schemas.in b/calendar/gui/apps_evolution_calendar.schemas.in
index be21c2930c..acf9550874 100644
--- a/calendar/gui/apps_evolution_calendar.schemas.in
+++ b/calendar/gui/apps_evolution_calendar.schemas.in
@@ -16,6 +16,18 @@
</schema>
<schema>
+ <key>/schemas/apps/evolution/calendar/display/use_system_timezone</key>
+ <applyto>/apps/evolution/calendar/display/use_system_timezone</applyto>
+ <owner>evolution-calendar</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Use system timezone</short>
+ <long>Check this to use system timezone in Evolution.</long>
+ </locale>
+ </schema>
+
+ <schema>
<key>/schemas/apps/evolution/calendar/display/day_second_zone</key>
<applyto>/apps/evolution/calendar/display/day_second_zone</applyto>
<owner>evolution-calendar</owner>
diff --git a/calendar/gui/calendar-config-keys.h b/calendar/gui/calendar-config-keys.h
index 9d744eeb8e..691b4f0281 100644
--- a/calendar/gui/calendar-config-keys.h
+++ b/calendar/gui/calendar-config-keys.h
@@ -28,6 +28,7 @@ G_BEGIN_DECLS
#define CALENDAR_CONFIG_PREFIX "/apps/evolution/calendar"
/* Display settings */
+#define CALENDAR_CONFIG_USE_SYSTEM_TIMEZONE CALENDAR_CONFIG_PREFIX "/display/use_system_timezone"
#define CALENDAR_CONFIG_TIMEZONE CALENDAR_CONFIG_PREFIX "/display/timezone"
#define CALENDAR_CONFIG_SELECTED_CALENDARS CALENDAR_CONFIG_PREFIX "/display/selected_calendars"
#define CALENDAR_CONFIG_PRIMARY_CALENDAR CALENDAR_CONFIG_PREFIX "/display/primary_calendar"
diff --git a/calendar/gui/calendar-config.c b/calendar/gui/calendar-config.c
index 103d92f640..65864ea272 100644
--- a/calendar/gui/calendar-config.c
+++ b/calendar/gui/calendar-config.c
@@ -39,8 +39,6 @@
#include "calendar-config-keys.h"
#include "calendar-config.h"
-
-
static GConfClient *config = NULL;
static void
@@ -182,6 +180,35 @@ calendar_config_add_notification_primary_calendar (GConfClientNotifyFunc func, g
return id;
}
+gboolean
+calendar_config_get_use_system_timezone (void)
+{
+ calendar_config_init ();
+
+ return gconf_client_get_bool (config, CALENDAR_CONFIG_USE_SYSTEM_TIMEZONE, NULL);
+}
+
+void
+calendar_config_set_use_system_timezone (gboolean use)
+{
+ calendar_config_init ();
+
+ if (calendar_config_get_use_system_timezone () != use) {
+ gconf_client_set_bool (config, CALENDAR_CONFIG_USE_SYSTEM_TIMEZONE, use, NULL);
+ gconf_client_notify (config, CALENDAR_CONFIG_TIMEZONE);
+
+ /* FIXME: notify CALENDAR_CONFIG_TIMEZONE change on system timezone change
+ itself too, when using system timezone. How to receive such change? */
+ }
+}
+
+guint
+calendar_config_add_notification_use_system_timezone (GConfClientNotifyFunc func, gpointer data)
+{
+ calendar_config_init ();
+
+ return gconf_client_notify_add (config, CALENDAR_CONFIG_USE_SYSTEM_TIMEZONE, func, data, NULL, NULL);
+}
/* The current timezone, e.g. "Europe/London". It may be NULL, in which case
you should assume UTC (though Evolution will show the timezone-setting
@@ -189,6 +216,15 @@ calendar_config_add_notification_primary_calendar (GConfClientNotifyFunc func, g
gchar *
calendar_config_get_timezone (void)
{
+ if (calendar_config_get_use_system_timezone ())
+ return e_cal_util_get_system_timezone_location ();
+
+ return calendar_config_get_timezone_stored ();
+}
+
+gchar *
+calendar_config_get_timezone_stored (void)
+{
calendar_config_init ();
return gconf_client_get_string (config, CALENDAR_CONFIG_TIMEZONE, NULL);
diff --git a/calendar/gui/calendar-config.h b/calendar/gui/calendar-config.h
index a7ee394f52..667962e1db 100644
--- a/calendar/gui/calendar-config.h
+++ b/calendar/gui/calendar-config.h
@@ -73,8 +73,14 @@ char *calendar_config_get_primary_calendar (void);
void calendar_config_set_primary_calendar (const char *primary_uid);
guint calendar_config_add_notification_primary_calendar (GConfClientNotifyFunc func, gpointer data);
+/* Use system timezone; if TRUE, then influences also the current timezone functions. */
+gboolean calendar_config_get_use_system_timezone (void);
+void calendar_config_set_use_system_timezone (gboolean use);
+guint calendar_config_add_notification_use_system_timezone (GConfClientNotifyFunc func, gpointer data);
+
/* The current timezone, e.g. "Europe/London". */
gchar* calendar_config_get_timezone (void);
+gchar* calendar_config_get_timezone_stored (void);
icaltimezone *calendar_config_get_icaltimezone (void);
void calendar_config_set_timezone (const gchar *timezone);
guint calendar_config_add_notification_timezone (GConfClientNotifyFunc func, gpointer data);
diff --git a/calendar/gui/dialogs/cal-prefs-dialog.c b/calendar/gui/dialogs/cal-prefs-dialog.c
index edb802fd10..60678d93e1 100644
--- a/calendar/gui/dialogs/cal-prefs-dialog.c
+++ b/calendar/gui/dialogs/cal-prefs-dialog.c
@@ -480,6 +480,30 @@ template_url_changed (GtkEntry *entry, CalendarPrefsDialog *prefs)
}
static void
+update_system_tz_widgets (CalendarPrefsDialog *prefs)
+{
+ icaltimezone *zone;
+
+ zone = e_cal_util_get_system_timezone ();
+ if (zone) {
+ char *tmp = g_strdup_printf ("(%s)", icaltimezone_get_display_name (zone));
+ gtk_label_set_text (GTK_LABEL (prefs->system_tz_label), tmp);
+ g_free (tmp);
+ } else {
+ gtk_label_set_text (GTK_LABEL (prefs->system_tz_label), "(UTC)");
+ }
+
+ gtk_widget_set_sensitive (prefs->timezone, !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (prefs->use_system_tz_check)));
+}
+
+static void
+use_system_tz_changed (GtkWidget *check, CalendarPrefsDialog *prefs)
+{
+ calendar_config_set_use_system_timezone (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)));
+ update_system_tz_widgets (prefs);
+}
+
+static void
setup_changes (CalendarPrefsDialog *prefs)
{
int i;
@@ -487,6 +511,7 @@ setup_changes (CalendarPrefsDialog *prefs)
for (i = 0; i < 7; i ++)
g_signal_connect (G_OBJECT (prefs->working_days[i]), "toggled", G_CALLBACK (working_days_changed), prefs);
+ g_signal_connect (G_OBJECT (prefs->use_system_tz_check), "toggled", G_CALLBACK (use_system_tz_changed), prefs);
g_signal_connect (G_OBJECT (prefs->timezone), "changed", G_CALLBACK (timezone_changed), prefs);
g_signal_connect (G_OBJECT (prefs->day_second_zone), "clicked", G_CALLBACK (day_second_zone_clicked), prefs);
@@ -620,8 +645,13 @@ show_config (CalendarPrefsDialog *prefs)
CalUnits units;
int interval;
+ /* Use system timezone */
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prefs->use_system_tz_check), calendar_config_get_use_system_timezone ());
+ gtk_widget_set_sensitive (prefs->system_tz_label, FALSE);
+ update_system_tz_widgets (prefs);
+
/* Timezone. */
- location = calendar_config_get_timezone ();
+ location = calendar_config_get_timezone_stored ();
zone = icaltimezone_get_builtin_timezone (location);
e_timezone_entry_set_timezone (E_TIMEZONE_ENTRY (prefs->timezone), zone);
g_free (location);
@@ -762,6 +792,8 @@ calendar_prefs_dialog_construct (CalendarPrefsDialog *prefs)
e_config_add_items ((EConfig *) ec, l, NULL, NULL, eccp_free, prefs);
/* General tab */
+ prefs->use_system_tz_check = glade_xml_get_widget (gui, "use-system-tz-check");
+ prefs->system_tz_label = glade_xml_get_widget (gui, "system-tz-label");
prefs->timezone = glade_xml_get_widget (gui, "timezone");
prefs->day_second_zone = glade_xml_get_widget (gui, "day_second_zone");
for (i = 0; i < 7; i++)
diff --git a/calendar/gui/dialogs/cal-prefs-dialog.glade b/calendar/gui/dialogs/cal-prefs-dialog.glade
index 23406d5963..867abdbb22 100644
--- a/calendar/gui/dialogs/cal-prefs-dialog.glade
+++ b/calendar/gui/dialogs/cal-prefs-dialog.glade
@@ -96,37 +96,103 @@
<child>
<widget class="GtkTable" id="time">
<property name="visible">True</property>
- <property name="n_rows">4</property>
+ <property name="n_rows">5</property>
<property name="n_columns">2</property>
<property name="homogeneous">False</property>
<property name="row_spacing">6</property>
<property name="column_spacing">6</property>
<child>
- <widget class="Custom" id="timezone">
+ <widget class="GtkLabel" id="label63">
<property name="visible">True</property>
- <property name="creation_function">make_timezone_entry</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Thu, 13 Jan 2005 04:18:03 GMT</property>
- <accessibility>
- <atkrelation target="timezone_label" type="labelled-by"/>
- </accessibility>
+ <property name="label" translatable="yes">Se_cond zone:</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">day_second_zone</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox25">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkButton" id="day_second_zone">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">None</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label64">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">(Shown in a Day View)</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">6</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">fill</property>
<property name="y_options">fill</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="timezone_label">
+ <widget class="GtkLabel" id="label11">
<property name="visible">True</property>
- <property name="label" translatable="yes">Time _zone:</property>
- <property name="use_underline">True</property>
+ <property name="label" translatable="yes">Time format:</property>
+ <property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
@@ -135,7 +201,6 @@
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
- <property name="mnemonic_widget">timezone</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
@@ -144,8 +209,30 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="daylight_cb">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Adjust for daylight sa_ving time</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
@@ -199,34 +286,28 @@
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options">fill</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label11">
+ <widget class="GtkCheckButton" id="daylight_cb">
<property name="visible">True</property>
- <property name="label" translatable="yes">Time format:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Adjust for daylight sa_ving time</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">fill</property>
@@ -235,9 +316,29 @@
</child>
<child>
- <widget class="GtkLabel" id="label63">
+ <widget class="Custom" id="timezone">
<property name="visible">True</property>
- <property name="label" translatable="yes">Se_cond zone:</property>
+ <property name="creation_function">make_timezone_entry</property>
+ <property name="int1">0</property>
+ <property name="int2">0</property>
+ <property name="last_modification_time">Thu, 13 Jan 2005 04:18:03 GMT</property>
+ <accessibility>
+ <atkrelation target="timezone_label" type="labelled-by"/>
+ </accessibility>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="timezone_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Time _zone:</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -247,7 +348,7 @@
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
- <property name="mnemonic_widget">day_second_zone</property>
+ <property name="mnemonic_widget">timezone</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
@@ -256,39 +357,42 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkHBox" id="hbox25">
+ <widget class="GtkHBox" id="hbox26">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
- <widget class="GtkButton" id="day_second_zone">
+ <widget class="GtkCheckButton" id="use-system-tz-check">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="label" translatable="yes">None</property>
+ <property name="label" translatable="yes">Use s_ystem time zone</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
</widget>
<packing>
<property name="padding">0</property>
- <property name="expand">True</property>
+ <property name="expand">False</property>
<property name="fill">True</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label64">
+ <widget class="GtkLabel" id="system-tz-label">
<property name="visible">True</property>
- <property name="label" translatable="yes">(Shown in a Day View)</property>
+ <property name="label">(system/tz)</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -296,7 +400,7 @@
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
- <property name="xpad">6</property>
+ <property name="xpad">5</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
@@ -313,10 +417,9 @@
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
<property name="x_options">fill</property>
- <property name="y_options">fill</property>
</packing>
</child>
</widget>
@@ -1246,6 +1349,7 @@ Days</property>
<property name="fill">False</property>
</packing>
</child>
+
<child>
<widget class="GtkCheckButton" id="dview_show_week_no">
<property name="visible">True</property>
diff --git a/calendar/gui/dialogs/cal-prefs-dialog.h b/calendar/gui/dialogs/cal-prefs-dialog.h
index 945c1d6e16..559eacced7 100644
--- a/calendar/gui/dialogs/cal-prefs-dialog.h
+++ b/calendar/gui/dialogs/cal-prefs-dialog.h
@@ -43,6 +43,8 @@ struct _CalendarPrefsDialog {
GConfClient *gconf;
/* General tab */
+ GtkWidget *use_system_tz_check;
+ GtkWidget *system_tz_label;
GtkWidget *timezone;
GtkWidget *day_second_zone;
GtkWidget *working_days[7];