aboutsummaryrefslogtreecommitdiff
path: root/debian/patches/fix-timezones.patch
blob: 6e32d6187a768e2e2639827269505dded2f25f3f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
Index: indicator-datetime.ubu/src/Makefile.am
===================================================================
--- indicator-datetime.ubu.orig/src/Makefile.am	2011-06-28 15:42:04.085059003 +0100
+++ indicator-datetime.ubu/src/Makefile.am	2011-06-28 15:42:19.553059167 +0100
@@ -34,6 +34,7 @@
 libdatetime_la_CFLAGS = \
 	$(INDICATOR_CFLAGS) \
 	-Wall -Werror \
+	-DTIMEZONE_FILE="\"/etc/timezone\"" \
 	-DG_LOG_DOMAIN=\"Indicator-Datetime\"
 libdatetime_la_LIBADD = \
 	$(INDICATOR_LIBS)
@@ -55,6 +56,7 @@
 	-Werror \
 	-I$(top_srcdir)/libmap \
 	$(PREF_CFLAGS) \
+	-DTIMEZONE_FILE="\"/etc/timezone\"" \
 	-DPKGDATADIR="\"$(pkgdatadir)\""
 indicator_datetime_preferences_LDADD = \
 	 $(top_builddir)/libmap/libmap.la \
Index: indicator-datetime.ubu/src/datetime-prefs.c
===================================================================
--- indicator-datetime.ubu.orig/src/datetime-prefs.c	2011-06-28 15:42:04.129059003 +0100
+++ indicator-datetime.ubu/src/datetime-prefs.c	2011-06-28 15:42:19.553059167 +0100
@@ -223,10 +223,8 @@
   if (location == NULL)
     return;
 
-  gchar * file = g_build_filename ("/usr/share/zoneinfo", location->zone, NULL);
-  g_dbus_proxy_call (proxy, "SetTimezone", g_variant_new ("(s)", file),
+  g_dbus_proxy_call (proxy, "SetTimezone", g_variant_new ("(s)", location->zone),
                      G_DBUS_CALL_FLAGS_NONE, -1, NULL, dbus_set_answered, "timezone");
-  g_free (file);
 
   sync_entry (location->zone);
 }
Index: indicator-datetime.ubu/src/datetime-service.c
===================================================================
--- indicator-datetime.ubu.orig/src/datetime-service.c	2011-06-28 15:42:04.249059005 +0100
+++ indicator-datetime.ubu/src/datetime-service.c	2011-06-28 15:42:19.561059167 +0100
@@ -221,29 +221,15 @@
 		current_timezone = NULL;
 	}
 
-	GError * error = NULL;
-	gchar * tempzone = NULL;
-	if (!g_file_get_contents(TIMEZONE_FILE, &tempzone, NULL, &error)) {
-		g_warning("Unable to read timezone file '" TIMEZONE_FILE "': %s", error->message);
-		g_error_free(error);
+	current_timezone = read_timezone ();
+	if (current_timezone == NULL) {
 		return;
 	}
 
-	/* This shouldn't happen, so let's make it a big boom! */
-	g_return_if_fail(tempzone != NULL);
-
-	/* Note: this really makes sense as strstrip works in place
-	   so we end up with something a little odd without the dup
-	   so we have the dup to make sure everything is as expected
-	   for everyone else. */
-	current_timezone = g_strdup(g_strstrip(tempzone));
-	g_free(tempzone);
-
 	g_debug("System timezone is: %s", current_timezone);
 
 	check_timezone_sync();
 
-    if (error != NULL) g_error_free(error);
 	return;
 }
 
@@ -276,10 +262,8 @@
 		return;
 	}
 
-	gchar * file = g_build_filename ("/usr/share/zoneinfo", (char *)zone, NULL);
-	g_dbus_proxy_call (proxy, "SetTimezone", g_variant_new ("(s)", file),
+	g_dbus_proxy_call (proxy, "SetTimezone", g_variant_new ("(s)", zone),
 	                   G_DBUS_CALL_FLAGS_NONE, -1, NULL, quick_set_tz_cb, NULL);
-	g_free (file);
 	g_free (zone);
 	g_object_unref (proxy);
 }
Index: indicator-datetime.ubu/src/indicator-datetime.c
===================================================================
--- indicator-datetime.ubu.orig/src/indicator-datetime.c	2011-06-28 15:42:04.293059005 +0100
+++ indicator-datetime.ubu/src/indicator-datetime.c	2011-06-28 15:42:19.565059167 +0100
@@ -761,11 +761,18 @@
                            GTimeZone * tz, const gchar * format,
                            GDateTime ** datetime)
 {
+	gboolean unref_tz = FALSE;
+	if (tz == NULL) {
+		gchar * zone = read_timezone ();
+		if (zone == NULL)
+			return;
+		tz = g_time_zone_new(zone);
+		unref_tz = TRUE;
+		g_free (zone);
+	}
+
 	GDateTime * datetime_now;
-	if (tz == NULL)
-		datetime_now = g_date_time_new_now_local();
-	else
-		datetime_now = g_date_time_new_now(tz);
+	datetime_now = g_date_time_new_now(tz);
 
 	gchar * timestr;
 	if (format == NULL) {
@@ -793,6 +800,9 @@
 	else
 		g_date_time_unref(datetime_now);
 
+	if (unref_tz)
+		g_time_zone_unref(tz);
+
 	return;
 }
 
Index: indicator-datetime.ubu/src/utils.c
===================================================================
--- indicator-datetime.ubu.orig/src/utils.c	2011-06-28 15:42:04.169059004 +0100
+++ indicator-datetime.ubu/src/utils.c	2011-06-28 15:42:19.565059167 +0100
@@ -117,6 +117,30 @@
   return rv;
 }
 
+gchar *
+read_timezone ()
+{
+	GError * error = NULL;
+	gchar * tempzone = NULL;
+	if (!g_file_get_contents(TIMEZONE_FILE, &tempzone, NULL, &error)) {
+		g_warning("Unable to read timezone file '" TIMEZONE_FILE "': %s", error->message);
+		g_error_free(error);
+		return NULL;
+	}
+
+	/* This shouldn't happen, so let's make it a big boom! */
+	g_return_val_if_fail(tempzone != NULL, NULL);
+
+	/* Note: this really makes sense as strstrip works in place
+	   so we end up with something a little odd without the dup
+	   so we have the dup to make sure everything is as expected
+	   for everyone else. */
+	gchar * rv = g_strdup(g_strstrip(tempzone));
+	g_free(tempzone);
+
+  return rv;
+}
+
 /* Translate msg according to the locale specified by LC_TIME */
 static char *
 T_(const char *msg)
Index: indicator-datetime.ubu/src/utils.h
===================================================================
--- indicator-datetime.ubu.orig/src/utils.h	2011-06-28 15:42:04.209059004 +0100
+++ indicator-datetime.ubu/src/utils.h	2011-06-28 15:42:19.569059167 +0100
@@ -30,6 +30,7 @@
 gboolean is_locale_12h (void);
 void split_settings_location (const gchar * location, gchar ** zone, gchar ** name);
 gchar * get_current_zone_name (const gchar * location);
+gchar * read_timezone ();
 gchar * generate_format_string_full (gboolean show_day, gboolean show_date);
 gchar * generate_format_string_at_time (GDateTime * time);