From 4207f22ac83a0c4f06cc2ae588605c2f235449e8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Javier=20Jard=C3=B3n?= <javier.jardon@codethink.co.uk>
Date: Thu, 25 Aug 2011 15:46:51 +0100
Subject: Update the date when open the indicator-datetime menu

Fixes https://bugs.launchpad.net/indicator-datetime/+bug/793450
---
 src/indicator-datetime.c | 6 ------
 1 file changed, 6 deletions(-)

(limited to 'src')

diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c
index aca1101..59bcaf3 100644
--- a/src/indicator-datetime.c
+++ b/src/indicator-datetime.c
@@ -274,12 +274,6 @@ menu_visible_notfy_cb(GtkWidget * menu, G_GNUC_UNUSED GParamSpec *pspec, gpointe
 	gint y, m, d;
 
 	g_debug("notify visible signal received");
-	
-	// we should only react if we're currently visible
-	gboolean visible;
-	g_object_get(G_OBJECT(menu), "visible", &visible, NULL);
-	if (visible) return;
-	g_debug("notify visible menu hidden, resetting date");
 
 	datetime = g_date_time_new_now_local ();
 	g_date_time_get_ymd (datetime, &y, &m, &d);
-- 
cgit v1.2.3


From 59d57493997f075adc49e002bd85129a9fc1f329 Mon Sep 17 00:00:00 2001
From: Michael Terry <michael.terry@canonical.com>
Date: Wed, 31 Aug 2011 09:42:08 -0400
Subject: disable evolution functionality when in greeter mode

---
 src/datetime-service.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src')

diff --git a/src/datetime-service.c b/src/datetime-service.c
index e46b04d..57a726c 100644
--- a/src/datetime-service.c
+++ b/src/datetime-service.c
@@ -482,7 +482,7 @@ check_for_calendar (gpointer user_data)
 	dbusmenu_menuitem_property_set_bool(date, DBUSMENU_MENUITEM_PROP_ENABLED, TRUE);
 	
 	gchar *evo = g_find_program_in_path("evolution");
-	if (evo != NULL) {
+	if (!get_greeter_mode () && evo != NULL) {
 		g_debug("Found the calendar application: %s", evo);
 		
 		g_signal_connect (G_OBJECT(date), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
-- 
cgit v1.2.3


From 1ab5a36d28ea2d3bac39534de9c18a95bfcb0670 Mon Sep 17 00:00:00 2001
From: Espen Wiborg <espenhw@grumblesmurf.org>
Date: Thu, 1 Sep 2011 12:05:17 -0500
Subject: Set default timezone on events

---
 src/datetime-service.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

(limited to 'src')

diff --git a/src/datetime-service.c b/src/datetime-service.c
index 57a726c..80c0b57 100644
--- a/src/datetime-service.c
+++ b/src/datetime-service.c
@@ -770,6 +770,18 @@ update_appointment_menu_items (gpointer user_data)
 			ECal *ecal = e_cal_new(source, E_CAL_SOURCE_TYPE_EVENT);
 			e_cal_set_auth_func (ecal, (ECalAuthFunc) auth_func, NULL);
 			
+			icaltimezone* current_zone = icaltimezone_get_builtin_timezone(current_timezone);
+			if (!current_zone) {
+				// current_timezone may be a TZID?
+				current_zone = icaltimezone_get_builtin_timezone_from_tzid(current_timezone);
+			}
+			if (current_zone && !e_cal_set_default_timezone(ecal, current_zone, &gerror)) {
+				g_debug("Failed to set ecal default timezone %s", gerror->message);
+				g_error_free(gerror);
+				gerror = NULL;
+				continue;
+			}
+			
 			if (!e_cal_open(ecal, FALSE, &gerror)) {
 				g_debug("Failed to get ecal sources %s", gerror->message);
 				g_error_free(gerror);
-- 
cgit v1.2.3


From 0fad515e1b65662306219464f00485817fc75511 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Javier=20Jard=C3=B3n?= <javier.jardon@codethink.co.uk>
Date: Fri, 2 Sep 2011 16:43:16 +0100
Subject: Warning when the user use a date format not supported

We are using the g_date_time_format () function and the format strings
understood by this function are a subset of the strftime() format language.
---
 src/indicator-datetime.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c
index 59bcaf3..f773159 100644
--- a/src/indicator-datetime.c
+++ b/src/indicator-datetime.c
@@ -215,7 +215,7 @@ indicator_datetime_class_init (IndicatorDatetimeClass *klass)
 	                                 PROP_TIME_FORMAT,
 	                                 g_param_spec_int(PROP_TIME_FORMAT_S,
 	                                                  "A choice of which format should be used on the panel",
-	                                                  "Chooses between letting the locale choose the time, 12-hour time, 24-time or using the custom string passed to strftime().",
+	                                                  "Chooses between letting the locale choose the time, 12-hour time, 24-time or using the custom string passed to g_date_time_format().",
 	                                                  SETTINGS_TIME_LOCALE, /* min */
 	                                                  SETTINGS_TIME_CUSTOM, /* max */
 	                                                  SETTINGS_TIME_LOCALE, /* default */
@@ -245,7 +245,7 @@ indicator_datetime_class_init (IndicatorDatetimeClass *klass)
 	                                 PROP_CUSTOM_TIME_FORMAT,
 	                                 g_param_spec_string(PROP_CUSTOM_TIME_FORMAT_S,
 	                                                     "The format that is used to show the time on the panel.",
-	                                                     "A format string in the form used to pass to strftime to make a string for displaying on the panel.",
+	                                                     "A format string in the form used to pass to g_date_time_format() to make a string for displaying on the panel.",
 	                                                     DEFAULT_TIME_FORMAT,
 	                                                     G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
@@ -775,6 +775,12 @@ set_label_to_time_in_zone (IndicatorDatetime * self, GtkLabel * label,
 	}
 	else {
 		timestr = g_date_time_format(datetime_now, format);
+		if (timestr == NULL) {
+			g_warning ("The custom date format is not valid, check the
+			            g_date_time_format() documentation for the supported
+			            format specifiers ");
+			timestr = g_strdup ("Date format not supported");
+		}
 	}
 
 	gboolean use_markup = FALSE;
-- 
cgit v1.2.3


From e4fed0186ac63ebf14a5d35b6f1aacfc306ad1ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Javier=20Jard=C3=B3n?= <javier.jardon@codethink.co.uk>
Date: Mon, 5 Sep 2011 12:34:31 +0100
Subject: Use GnomeWallClock instead of periodic timeout

This class support changes in the timezone and notifications of clock skews
when using a recent version of Linux (using timerfds)
See https://bugzilla.gnome.org/show_bug.cgi?id=655129

Fixes https://bugs.launchpad.net/indicator-datetime/+bug/837440
---
 src/datetime-service.c | 77 ++++++++------------------------------------------
 1 file changed, 12 insertions(+), 65 deletions(-)

(limited to 'src')

diff --git a/src/datetime-service.c b/src/datetime-service.c
index 80c0b57..8026398 100644
--- a/src/datetime-service.c
+++ b/src/datetime-service.c
@@ -38,6 +38,10 @@ with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <geoclue/geoclue-master.h>
 #include <geoclue/geoclue-master-client.h>
 
+#define GNOME_DESKTOP_USE_UNSTABLE_API
+#include <gdesktop-enums.h>
+#include <libgnome-desktop/gnome-wall-clock.h>
+
 #include <time.h>
 #include <libecal/e-cal.h>
 #include <libical/ical.h>
@@ -57,7 +61,6 @@ with this program.  If not, see <http://www.gnu.org/licenses/>.
 static void geo_create_client (GeoclueMaster * master, GeoclueMasterClient * client, gchar * path, GError * error, gpointer user_data);
 static gboolean update_appointment_menu_items (gpointer user_data);
 static gboolean update_timezone_menu_items(gpointer user_data);
-static void setup_timer (void);
 static void geo_client_invalid (GeoclueMasterClient * client, gpointer user_data);
 static void geo_address_change (GeoclueMasterClient * client, gchar * a, gchar * b, gchar * c, gchar * d, gpointer user_data);
 static gboolean get_greeter_mode (void);
@@ -1139,67 +1142,12 @@ build_menus (DbusmenuMenuitem * root)
 	return;
 }
 
-/* Run when the timezone file changes */
 static void
-timezone_changed (GFileMonitor * monitor, GFile * file, GFile * otherfile, GFileMonitorEvent event, gpointer user_data)
+on_clock_changed (GnomeWallClock *clock,
+                  GParamSpec     *pspec,
+                  gpointer        user_data)
 {
-	update_current_timezone();
-	datetime_interface_update(DATETIME_INTERFACE(user_data));
-	update_datetime(NULL);
-	setup_timer();
-	return;
-}
-
-/* Set up monitoring the timezone file */
-static void
-build_timezone (DatetimeInterface * dbus)
-{
-	GFile * timezonefile = g_file_new_for_path(TIMEZONE_FILE);
-	GFileMonitor * monitor = g_file_monitor_file(timezonefile, G_FILE_MONITOR_NONE, NULL, NULL);
-	if (monitor != NULL) {
-		g_signal_connect(G_OBJECT(monitor), "changed", G_CALLBACK(timezone_changed), dbus);
-		g_debug("Monitoring timezone file: '" TIMEZONE_FILE "'");
-	} else {
-		g_warning("Unable to monitor timezone file: '" TIMEZONE_FILE "'");
-	}
-	return;
-}
-
-/* Source ID for the timer */
-static guint timer = 0;
-
-/* Execute at a given time, update and setup a new
-   timer to go again.  */
-static gboolean
-timer_func (gpointer user_data)
-{
-	timer = 0;
-	/* Reset up each time to reduce error */
-	setup_timer();
-	update_datetime(NULL);
-	return FALSE;
-}
-
-/* Sets up the time to launch the timer to update the
-   date in the datetime entry */
-static void
-setup_timer (void)
-{
-	if (timer != 0) {
-		g_source_remove(timer);
-		timer = 0;
-	}
-
-	time_t t;
-	t = time(NULL);
-	struct tm * ltime = localtime(&t);
-
-	timer = g_timeout_add_seconds(((23 - ltime->tm_hour) * 60 * 60) +
-	                              ((59 - ltime->tm_min) * 60) +
-	                              ((60 - ltime->tm_sec)) + 60 /* one minute past */,
-	                              timer_func, NULL);
-
-	return;
+  update_datetime (NULL);
 }
 
 static void
@@ -1213,7 +1161,6 @@ session_active_change_cb (GDBusProxy * proxy, gchar * sender_name, gchar * signa
 		if (!idle) {
 			datetime_interface_update(DATETIME_INTERFACE(user_data));
 			update_datetime(NULL);
-			setup_timer();
 		}
 	}
 	return;
@@ -1437,6 +1384,8 @@ service_shutdown (IndicatorService * service, gpointer user_data)
 int
 main (int argc, char ** argv)
 {
+	GnomeWallClock *clock;
+
 	g_type_init();
 
 	/* Acknowledging the service init and setting up the interface */
@@ -1472,11 +1421,9 @@ main (int argc, char ** argv)
 	/* Setup dbus interface */
 	dbus = g_object_new(DATETIME_INTERFACE_TYPE, NULL);
 
-	/* Setup timezone watch */
-	build_timezone(dbus);
-
 	/* Setup the timer */
-	setup_timer();
+	clock = g_object_new (GNOME_TYPE_WALL_CLOCK, NULL);
+	g_signal_connect (priv->clock_tracker, "notify::clock", G_CALLBACK (on_clock_changed), NULL);
 
 	/* And watch for system resumes */
 	g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
-- 
cgit v1.2.3


From 805b0b286192282b590b4003612fdf29d2284c0a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Javier=20Jard=C3=B3n?= <javier.jardon@codethink.co.uk>
Date: Mon, 5 Sep 2011 14:31:13 +0100
Subject: indicator-datetime.c: Use GnomeWallClock instead of periodic timeout

This class support changes in the timezone and notifications of clock skews
when using a recent version of Linux (using timerfds)
See https://bugzilla.gnome.org/show_bug.cgi?id=655129

Fixes https://bugs.launchpad.net/indicator-datetime/+bug/837440
---
 src/indicator-datetime.c | 92 ++++++++++++++----------------------------------
 1 file changed, 26 insertions(+), 66 deletions(-)

(limited to 'src')

diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c
index 59bcaf3..2562b62 100644
--- a/src/indicator-datetime.c
+++ b/src/indicator-datetime.c
@@ -45,6 +45,10 @@ with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <libido/libido.h>
 #include <libdbusmenu-gtk3/menuitem.h>
 
+/* For GnomeWallClock */
+#define GNOME_DESKTOP_USE_UNSTABLE_API
+#include <libgnome-desktop/gnome-wall-clock.h>
+
 #include "utils.h"
 #include "dbus-shared.h"
 #include "settings-shared.h"
@@ -72,7 +76,6 @@ struct _IndicatorDatetime {
 
 struct _IndicatorDatetimePrivate {
 	GtkLabel * label;
-	guint timer;
 
 	gchar * time_string;
 
@@ -103,6 +106,8 @@ struct _IndicatorDatetimePrivate {
 	GSettings * settings;
 
 	GtkSizeGroup * indicator_right_group;
+
+	GnomeWallClock *clock;
 };
 
 /* Enum for the properties so that they can be quickly
@@ -169,8 +174,8 @@ static gboolean bind_enum_get             (GValue * value, GVariant * variant, g
 static gchar * generate_format_string_now (IndicatorDatetime * self);
 static void update_label                  (IndicatorDatetime * io, GDateTime ** datetime);
 static void guess_label_size              (IndicatorDatetime * self);
-static void setup_timer                   (IndicatorDatetime * self, GDateTime * datetime);
 static void update_time                   (IndicatorDatetime * self);
+static void on_clock_changed              (GnomeWallClock *clock, GParamSpec *pspec, gpointer user_data);
 static void receive_signal                (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, GVariant * parameters, gpointer user_data);
 static void service_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data);
 static gint generate_strftime_bitmask     (const char *time_str);
@@ -294,7 +299,6 @@ indicator_datetime_init (IndicatorDatetime *self)
 	self->priv = INDICATOR_DATETIME_GET_PRIVATE(self);
 
 	self->priv->label = NULL;
-	self->priv->timer = 0;
 
 	self->priv->idle_measure = 0;
 	self->priv->max_width = 0;
@@ -363,6 +367,9 @@ indicator_datetime_init (IndicatorDatetime *self)
 		g_warning("Unable to get settings for '" SETTINGS_INTERFACE "'");
 	}
 
+	self->priv->clock = g_object_new (GNOME_TYPE_WALL_CLOCK, NULL);
+	g_signal_connect (clock, "notify::clock", G_CALLBACK (on_clock_changed), self);
+
 	self->priv->sm = indicator_service_manager_new_version(SERVICE_NAME, SERVICE_VERSION);
 	self->priv->indicator_right_group = GTK_SIZE_GROUP(gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL));
 
@@ -435,9 +442,9 @@ indicator_datetime_dispose (GObject *object)
 		self->priv->label = NULL;
 	}
 
-	if (self->priv->timer != 0) {
-		g_source_remove(self->priv->timer);
-		self->priv->timer = 0;
+	if (self->priv->clock != NULL) {
+		g_object_unref (self->priv->clock);
+		self->priv->clock = NULL;
 	}
 
 	if (self->priv->idle_measure != 0) {
@@ -563,7 +570,7 @@ set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec
 		if (newval != self->priv->time_mode) {
 			update = TRUE;
 			self->priv->time_mode = newval;
-			setup_timer(self, NULL);			
+			update_time (self);
 		}
 		break;
 	}
@@ -572,7 +579,7 @@ set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec
 			self->priv->show_seconds = !self->priv->show_seconds;
 			if (self->priv->time_mode != SETTINGS_TIME_CUSTOM) {
 				update = TRUE;
-				setup_timer(self, NULL);
+				update_time (self);
 			}
 		}
 		break;
@@ -607,7 +614,7 @@ set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec
 			self->priv->custom_show_seconds = (time_mask & STRFTIME_MASK_SECONDS);
 			if (self->priv->time_mode == SETTINGS_TIME_CUSTOM) {
 				update = TRUE;
-				setup_timer(self, NULL);
+				update_time (self);
 			}
 		}
 		break;
@@ -825,11 +832,16 @@ update_time (IndicatorDatetime * self)
 	GDateTime * dt = NULL;
 	update_label(self, &dt);
 	timezone_update_all_labels(self);
-	if (dt != NULL) {
-		setup_timer(self, dt);
-		g_date_time_unref(dt);
-  }
-	return;
+}
+
+static void
+on_clock_changed (GnomeWallClock *clock,
+                  GParamSpec     *pspec,
+                  gpointer        user_data)
+{
+  IndicatorDatetime *self = INDICATOR_DATETIME (user_data);
+
+  update_time (self);
 }
 
 /* Receives all signals from the service, routed to the appropriate functions */
@@ -846,54 +858,6 @@ receive_signal (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name,
 	return;
 }
 
-/* Runs every minute and updates the time */
-gboolean
-timer_func (gpointer user_data)
-{
-	IndicatorDatetime * self = INDICATOR_DATETIME(user_data);
-	self->priv->timer = 0;
-	GDateTime * dt = NULL;
-	update_label(self, &dt);
-	timezone_update_all_labels(self);
-	if (dt != NULL) {
-		setup_timer(self, dt);
-		g_date_time_unref(dt);
-  }
-	return FALSE;
-}
-
-/* Configure the timer to run the next time through */
-static void
-setup_timer (IndicatorDatetime * self, GDateTime * datetime)
-{
-	gboolean unref = FALSE;
-
-	if (self->priv->timer != 0) {
-		g_source_remove(self->priv->timer);
-		self->priv->timer = 0;
-	}
-	
-	if (self->priv->show_seconds ||
-		(self->priv->time_mode == SETTINGS_TIME_CUSTOM && self->priv->custom_show_seconds)) {
-		self->priv->timer = g_timeout_add_full(G_PRIORITY_HIGH, 999, timer_func, self, NULL);
-	} else {
-		if (datetime == NULL) {
-			datetime = g_date_time_new_now_local();
-			unref = TRUE;
-		}
-
-		/* Plus 2 so we're just after the minute, don't want to be early. */
-		gint seconds = (gint)g_date_time_get_seconds(datetime);
-		self->priv->timer = g_timeout_add_seconds(60 - seconds + 2, timer_func, self);
-
-		if (unref) {
-			g_date_time_unref(datetime);
-		}
-	}
-
-	return;
-}
-
 /* Does a quick meausre of how big the string is in
    pixels with a Pango layout */
 static gint
@@ -1513,10 +1477,6 @@ get_label (IndicatorObject * io)
 		gtk_widget_set_visible(GTK_WIDGET (self->priv->label), self->priv->show_clock);
 	}
 
-	if (self->priv->timer == 0) {
-		setup_timer(self, NULL);
-	}
-
 	return self->priv->label;
 }
 
-- 
cgit v1.2.3


From b36e02a7413f025f143a3fc2a00876c665bd43ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Javier=20Jard=C3=B3n?= <javier.jardon@codethink.co.uk>
Date: Mon, 5 Sep 2011 14:32:12 +0100
Subject: datetime-service: Fix typo

---
 src/datetime-service.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src')

diff --git a/src/datetime-service.c b/src/datetime-service.c
index 8026398..5a492c1 100644
--- a/src/datetime-service.c
+++ b/src/datetime-service.c
@@ -1423,7 +1423,7 @@ main (int argc, char ** argv)
 
 	/* Setup the timer */
 	clock = g_object_new (GNOME_TYPE_WALL_CLOCK, NULL);
-	g_signal_connect (priv->clock_tracker, "notify::clock", G_CALLBACK (on_clock_changed), NULL);
+	g_signal_connect (clock, "notify::clock", G_CALLBACK (on_clock_changed), NULL);
 
 	/* And watch for system resumes */
 	g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
-- 
cgit v1.2.3


From ef6479a971ec5e8ab1c12a090e6f2a338bd0c8ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Javier=20Jard=C3=B3n?= <javier.jardon@codethink.co.uk>
Date: Mon, 5 Sep 2011 15:17:31 +0100
Subject: indicator-datetime.c: Fix typo

---
 src/indicator-datetime.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src')

diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c
index 2562b62..9a74ced 100644
--- a/src/indicator-datetime.c
+++ b/src/indicator-datetime.c
@@ -368,7 +368,7 @@ indicator_datetime_init (IndicatorDatetime *self)
 	}
 
 	self->priv->clock = g_object_new (GNOME_TYPE_WALL_CLOCK, NULL);
-	g_signal_connect (clock, "notify::clock", G_CALLBACK (on_clock_changed), self);
+	g_signal_connect (self->priv->clock, "notify::clock", G_CALLBACK (on_clock_changed), self);
 
 	self->priv->sm = indicator_service_manager_new_version(SERVICE_NAME, SERVICE_VERSION);
 	self->priv->indicator_right_group = GTK_SIZE_GROUP(gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL));
-- 
cgit v1.2.3


From 87eaa8d2fa412e2f28360587308530fd3e9231d9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Javier=20Jard=C3=B3n?= <javier.jardon@codethink.co.uk>
Date: Mon, 5 Sep 2011 18:18:18 +0100
Subject: indicator-datetime: Update the desktop schema when showing seconds

As GnomeWallClock uses "clock-show-seconds" desktop key to update the current
time
---
 src/indicator-datetime.c | 9 +++++++++
 1 file changed, 9 insertions(+)

(limited to 'src')

diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c
index 9a74ced..16ad131 100644
--- a/src/indicator-datetime.c
+++ b/src/indicator-datetime.c
@@ -104,6 +104,7 @@ struct _IndicatorDatetimePrivate {
 	GList * timezone_items;
 
 	GSettings * settings;
+	GSettings * gnome_settings;
 
 	GtkSizeGroup * indicator_right_group;
 
@@ -367,6 +368,8 @@ indicator_datetime_init (IndicatorDatetime *self)
 		g_warning("Unable to get settings for '" SETTINGS_INTERFACE "'");
 	}
 
+	self->priv->gnome_settings = g_settings_new ("org.gnome.desktop.interface");
+
 	self->priv->clock = g_object_new (GNOME_TYPE_WALL_CLOCK, NULL);
 	g_signal_connect (self->priv->clock, "notify::clock", G_CALLBACK (on_clock_changed), self);
 
@@ -581,6 +584,9 @@ set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec
 				update = TRUE;
 				update_time (self);
 			}
+			g_settings_set_boolean (self->priv->gnome_settings,
+			                        "clock-show-seconds",
+			                        self->priv->show_seconds);
 		}
 		break;
 	}
@@ -616,6 +622,9 @@ set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec
 				update = TRUE;
 				update_time (self);
 			}
+			g_settings_set_boolean (self->priv->gnome_settings,
+			                        "clock-show-seconds",
+			                        self->priv->show_seconds);
 		}
 		break;
 	}
-- 
cgit v1.2.3


From c46efc32201b7aa3e876aea5a834a1401eb48077 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Javier=20Jard=C3=B3n?= <javier.jardon@codethink.co.uk>
Date: Tue, 6 Sep 2011 13:47:37 +0100
Subject: timezone-completion: Use private pointer instead GET_PRIV macro

---
 src/timezone-completion.c | 24 +++++++++++++-----------
 src/timezone-completion.h | 17 ++++++++++-------
 2 files changed, 23 insertions(+), 18 deletions(-)

(limited to 'src')

diff --git a/src/timezone-completion.c b/src/timezone-completion.c
index d190035..f223bf4 100644
--- a/src/timezone-completion.c
+++ b/src/timezone-completion.c
@@ -35,7 +35,6 @@ enum {
 
 /* static guint signals[LAST_SIGNAL] = { }; */
 
-typedef struct _TimezoneCompletionPrivate TimezoneCompletionPrivate;
 struct _TimezoneCompletionPrivate
 {
   GtkTreeModel * initial_model;
@@ -48,8 +47,6 @@ struct _TimezoneCompletionPrivate
   GHashTable *   request_table;
 };
 
-#define TIMEZONE_COMPLETION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), TIMEZONE_COMPLETION_TYPE, TimezoneCompletionPrivate))
-
 #define GEONAME_URL "http://geoname-lookup.ubuntu.com/?query=%s&release=%s&lang=%s"
 
 /* Prototypes */
@@ -71,7 +68,7 @@ match_func (GtkEntryCompletion *completion, const gchar *key,
 static void
 save_and_use_model (TimezoneCompletion * completion, GtkTreeModel * model)
 {
-  TimezoneCompletionPrivate * priv = TIMEZONE_COMPLETION_GET_PRIVATE(completion);
+  TimezoneCompletionPrivate * priv = completion->priv;
 
   g_hash_table_insert (priv->request_table, g_strdup (priv->request_text), g_object_ref_sink (model));
 
@@ -129,7 +126,7 @@ static void
 json_parse_ready (GObject *object, GAsyncResult *res, gpointer user_data)
 {
   TimezoneCompletion * completion = TIMEZONE_COMPLETION (user_data);
-  TimezoneCompletionPrivate * priv = TIMEZONE_COMPLETION_GET_PRIVATE(completion);
+  TimezoneCompletionPrivate * priv = completion->priv;
   GError * error = NULL;
   const gchar * prev_name = NULL;
   const gchar * prev_admin1 = NULL;
@@ -257,7 +254,7 @@ static void
 geonames_data_ready (GObject *object, GAsyncResult *res, gpointer user_data)
 {
   TimezoneCompletion * completion = TIMEZONE_COMPLETION (user_data);
-  TimezoneCompletionPrivate * priv = TIMEZONE_COMPLETION_GET_PRIVATE (completion);
+  TimezoneCompletionPrivate * priv = completion->priv;
   GError * error = NULL;
   GFileInputStream * stream;
 
@@ -335,7 +332,7 @@ get_version (void)
 static gboolean
 request_zones (TimezoneCompletion * completion)
 {
-  TimezoneCompletionPrivate * priv = TIMEZONE_COMPLETION_GET_PRIVATE (completion);
+  TimezoneCompletionPrivate * priv = completion->priv;
 
   priv->queued_request = 0;
 
@@ -373,7 +370,7 @@ request_zones (TimezoneCompletion * completion)
 static void
 entry_changed (GtkEntry * entry, TimezoneCompletion * completion)
 {
-  TimezoneCompletionPrivate * priv = TIMEZONE_COMPLETION_GET_PRIVATE (completion);
+  TimezoneCompletionPrivate * priv = completion->priv;
 
   if (priv->queued_request) {
     g_source_remove (priv->queued_request);
@@ -484,7 +481,7 @@ entry_keypress (GtkEntry * entry, GdkEventKey  *event, TimezoneCompletion * comp
 void
 timezone_completion_watch_entry (TimezoneCompletion * completion, GtkEntry * entry)
 {
-  TimezoneCompletionPrivate * priv = TIMEZONE_COMPLETION_GET_PRIVATE (completion);
+  TimezoneCompletionPrivate * priv = completion->priv;
 
   if (priv->queued_request) {
     g_source_remove (priv->queued_request);
@@ -604,7 +601,12 @@ timezone_completion_class_init (TimezoneCompletionClass *klass)
 static void
 timezone_completion_init (TimezoneCompletion * self)
 {
-  TimezoneCompletionPrivate * priv = TIMEZONE_COMPLETION_GET_PRIVATE (self);
+  TimezoneCompletionPrivate *priv;
+
+  self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+                                            TIMEZONE_COMPLETION_TYPE,
+                                            TimezoneCompletionPrivate);
+  priv = self->priv;
 
   priv->initial_model = GTK_TREE_MODEL (get_initial_model ());
 
@@ -630,7 +632,7 @@ timezone_completion_dispose (GObject * object)
   G_OBJECT_CLASS (timezone_completion_parent_class)->dispose (object);
 
   TimezoneCompletion * completion = TIMEZONE_COMPLETION (object);
-  TimezoneCompletionPrivate * priv = TIMEZONE_COMPLETION_GET_PRIVATE (completion);
+  TimezoneCompletionPrivate * priv = completion->priv;
 
   if (priv->changed_id) {
     if (priv->entry)
diff --git a/src/timezone-completion.h b/src/timezone-completion.h
index fdfb234..1592d79 100644
--- a/src/timezone-completion.h
+++ b/src/timezone-completion.h
@@ -34,15 +34,18 @@ G_BEGIN_DECLS
 #define IS_TIMEZONE_COMPLETION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TIMEZONE_COMPLETION_TYPE))
 #define TIMEZONE_COMPLETION_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), TIMEZONE_COMPLETION_TYPE, TimezoneCompletionClass))
 
-typedef struct _TimezoneCompletion      TimezoneCompletion;
-typedef struct _TimezoneCompletionClass TimezoneCompletionClass;
-
-struct _TimezoneCompletionClass {
-  GtkEntryCompletionClass parent_class;
-};
+typedef struct _TimezoneCompletion             TimezoneCompletion;
+typedef struct _TimezoneCompletionPrivate      TimezoneCompletionPrivate;
+typedef struct _TimezoneCompletionClass        TimezoneCompletionClass;
 
 struct _TimezoneCompletion {
   GtkEntryCompletion parent;
+
+  TimezoneCompletionPrivate *priv;
+};
+
+struct _TimezoneCompletionClass {
+  GtkEntryCompletionClass parent_class;
 };
 
 #define TIMEZONE_COMPLETION_ZONE      0
@@ -53,7 +56,7 @@ struct _TimezoneCompletion {
 #define TIMEZONE_COMPLETION_LATITUDE  5
 #define TIMEZONE_COMPLETION_LAST      6
 
-GType timezone_completion_get_type (void);
+GType timezone_completion_get_type (void) G_GNUC_CONST;
 TimezoneCompletion * timezone_completion_new ();
 void timezone_completion_watch_entry (TimezoneCompletion * completion, GtkEntry * entry);
 
-- 
cgit v1.2.3


From 5a40e16a537fe56e220d5db42c3870ce48ef1e88 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Javier=20Jard=C3=B3n?= <javier.jardon@codethink.co.uk>
Date: Tue, 6 Sep 2011 13:54:49 +0100
Subject: indicator-datetime.c: Use private pointer instead GET_PRIV macro

---
 src/indicator-datetime.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

(limited to 'src')

diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c
index 59bcaf3..f8dbdae 100644
--- a/src/indicator-datetime.c
+++ b/src/indicator-datetime.c
@@ -138,9 +138,6 @@ struct _indicator_item_t {
 #define PROP_SHOW_WEEK_NUMBERS_S        "show-week-numbers"
 #define PROP_SHOW_CALENDAR_S            "show-calendar"
 
-#define INDICATOR_DATETIME_GET_PRIVATE(o) \
-(G_TYPE_INSTANCE_GET_PRIVATE ((o), INDICATOR_DATETIME_TYPE, IndicatorDatetimePrivate))
-
 enum {
 	STRFTIME_MASK_NONE    = 0,      /* Hours or minutes as we always test those */
 	STRFTIME_MASK_SECONDS = 1 << 0, /* Seconds count */
@@ -291,7 +288,9 @@ menu_visible_notfy_cb(GtkWidget * menu, G_GNUC_UNUSED GParamSpec *pspec, gpointe
 static void
 indicator_datetime_init (IndicatorDatetime *self)
 {
-	self->priv = INDICATOR_DATETIME_GET_PRIVATE(self);
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+                                                  INDICATOR_DATETIME_TYPE,
+                                                  IndicatorDatetimePrivate);
 
 	self->priv->label = NULL;
 	self->priv->timer = 0;
@@ -400,11 +399,10 @@ service_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data)
 
 	IndicatorDatetime * self = INDICATOR_DATETIME(user_data);
 	g_return_if_fail(self != NULL);
+	IndicatorDatetimePrivate * priv = self->priv;
 
 	GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish(res, &error);
 
-	IndicatorDatetimePrivate * priv = INDICATOR_DATETIME_GET_PRIVATE(self);
-
 	if (priv->service_proxy_cancel != NULL) {
 		g_object_unref(priv->service_proxy_cancel);
 		priv->service_proxy_cancel = NULL;
@@ -537,7 +535,8 @@ bind_enum_get (GValue * value, GVariant * variant, gpointer user_data)
 static void
 timezone_update_all_labels (IndicatorDatetime * self)
 {
-	IndicatorDatetimePrivate *priv = INDICATOR_DATETIME_GET_PRIVATE(self);
+	IndicatorDatetimePrivate *priv = self->priv;
+
 	g_list_foreach(priv->timezone_items, (GFunc)timezone_update_labels, NULL);
 }
 
@@ -1386,8 +1385,7 @@ new_calendar_item (DbusmenuMenuitem * newitem,
 	/* Note: not checking parent, it's reasonable for it to be NULL */
 
 	IndicatorDatetime *self = INDICATOR_DATETIME(user_data);
-	self->priv = INDICATOR_DATETIME_GET_PRIVATE(self);
-	
+
 	IdoCalendarMenuItem *ido = IDO_CALENDAR_MENU_ITEM (ido_calendar_menu_item_new ());
 	self->priv->ido_calendar = ido;
 	
@@ -1431,7 +1429,9 @@ timezone_toggled_cb (GtkCheckMenuItem *checkmenuitem, DbusmenuMenuitem * dbusite
 static void
 timezone_destroyed_cb (indicator_item_t * mi_data, DbusmenuMenuitem * dbusitem)
 {
-	IndicatorDatetimePrivate *priv = INDICATOR_DATETIME_GET_PRIVATE(mi_data->self);
+	IndicatorDatetime *self = INDICATOR_DATETIME (mi_data->self);
+	IndicatorDatetimePrivate *priv = self->priv;
+
 	priv->timezone_items = g_list_remove(priv->timezone_items, mi_data);
 	g_signal_handlers_disconnect_by_func(G_OBJECT(mi_data->gmi), G_CALLBACK(timezone_toggled_cb), dbusitem);
 	g_free(mi_data);
@@ -1449,7 +1449,7 @@ new_timezone_item(DbusmenuMenuitem * newitem,
 	/* Note: not checking parent, it's reasonable for it to be NULL */
 
 	IndicatorDatetime * self = INDICATOR_DATETIME(user_data);
-	IndicatorDatetimePrivate *priv = INDICATOR_DATETIME_GET_PRIVATE(self);
+	IndicatorDatetimePrivate *priv = self->priv;
 
 	// Menu item with a radio button and a right aligned time
 	indicator_item_t * mi_data = g_new0(indicator_item_t, 1);
-- 
cgit v1.2.3


From 46ab5ac5bcb2811effd36f4418726421aba1052b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Javier=20Jard=C3=B3n?= <javier.jardon@codethink.co.uk>
Date: Tue, 6 Sep 2011 13:55:50 +0100
Subject: indicator-datetime.c: Use G_GNUC_CONST in the type declaration

---
 src/indicator-datetime.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src')

diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c
index f8dbdae..a9c8469 100644
--- a/src/indicator-datetime.c
+++ b/src/indicator-datetime.c
@@ -150,7 +150,7 @@ enum {
 	STRFTIME_MASK_ALL     = (STRFTIME_MASK_SECONDS | STRFTIME_MASK_AMPM | STRFTIME_MASK_WEEK | STRFTIME_MASK_DAY | STRFTIME_MASK_MONTH | STRFTIME_MASK_YEAR)
 };
 
-GType indicator_datetime_get_type (void);
+GType indicator_datetime_get_type (void) G_GNUC_CONST;
 
 static void indicator_datetime_class_init (IndicatorDatetimeClass *klass);
 static void indicator_datetime_init       (IndicatorDatetime *self);
-- 
cgit v1.2.3


From 34acc7b2e756c8cb98eb6560d0ea4d3d4d02d09c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Javier=20Jard=C3=B3n?= <javier.jardon@codethink.co.uk>
Date: Tue, 6 Sep 2011 15:25:34 +0100
Subject: Remove death code: calendar-menu-item

We use IdoCalendarMenuItem nowadays
---
 src/Makefile.am          |   2 -
 src/calendar-menu-item.c | 100 -----------------------------------------------
 src/calendar-menu-item.h |  59 ----------------------------
 3 files changed, 161 deletions(-)
 delete mode 100644 src/calendar-menu-item.c
 delete mode 100644 src/calendar-menu-item.h

(limited to 'src')

diff --git a/src/Makefile.am b/src/Makefile.am
index 6ca07a8..254022e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -8,8 +8,6 @@ indicator_datetime_service_SOURCES = \
 	datetime-interface.c \
 	datetime-interface.h \
 	gen-datetime-service.xml.c \
-	calendar-menu-item.c \
-	calendar-menu-item.h \
 	datetime-service.c \
 	utils.c \
 	utils.h \
diff --git a/src/calendar-menu-item.c b/src/calendar-menu-item.c
deleted file mode 100644
index c2ceec3..0000000
--- a/src/calendar-menu-item.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-Calendar menu item dbusmenu "transport" for the corresponding IDO widget.
-
-Copyright 2010 Canonical Ltd.
-
-Authors:
-    David Barth <david.barth@canonical.com>
-
-This program is free software: you can redistribute it and/or modify it 
-under the terms of the GNU General Public License version 3, as published 
-by the Free Software Foundation.
-
-This program is distributed in the hope that it will be useful, but 
-WITHOUT ANY WARRANTY; without even the implied warranties of 
-MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 
-PURPOSE.  See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along 
-with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gdk/gdk.h>
-#include <glib/gi18n.h>
-#include "calendar-menu-item.h"
-
-#include "dbus-shared.h"
-
-#include <libdbusmenu-glib/client.h>
-#include <libdbusmenu-glib/server.h>
-#include <libdbusmenu-glib/menuitem.h>
-
-enum {
-	LAST_SIGNAL
-};
-
-/* static guint signals[LAST_SIGNAL] = { }; */
-
-typedef struct _CalendarMenuItemPrivate CalendarMenuItemPrivate;
-struct _CalendarMenuItemPrivate
-{
-	void * placeholder;
-};
-
-#define CALENDAR_MENU_ITEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_MENU_ITEM_TYPE, CalendarMenuItemPrivate))
-
-/* Prototypes */
-static void calendar_menu_item_class_init (CalendarMenuItemClass *klass);
-static void calendar_menu_item_init       (CalendarMenuItem *self);
-static void calendar_menu_item_dispose    (GObject *object);
-static void calendar_menu_item_finalize   (GObject *object);
-
-G_DEFINE_TYPE (CalendarMenuItem, calendar_menu_item, DBUSMENU_TYPE_MENUITEM);
-
-static void
-calendar_menu_item_class_init (CalendarMenuItemClass *klass)
-{
-	GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-	g_type_class_add_private (klass, sizeof (CalendarMenuItemPrivate));
-
-	object_class->dispose = calendar_menu_item_dispose;
-	object_class->finalize = calendar_menu_item_finalize;
-
-	return;
-}
-
-static void
-calendar_menu_item_init (CalendarMenuItem *self)
-{
-	return;
-}
-
-static void
-calendar_menu_item_dispose (GObject *object)
-{
-	G_OBJECT_CLASS (calendar_menu_item_parent_class)->dispose (object);
-}
-
-static void
-calendar_menu_item_finalize (GObject *object)
-{
-	G_OBJECT_CLASS (calendar_menu_item_parent_class)->finalize (object);
-
-	return;
-}
-
-CalendarMenuItem *
-calendar_menu_item_new ()
-{
-	CalendarMenuItem * self = g_object_new(CALENDAR_MENU_ITEM_TYPE, NULL);
-
-	dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CALENDAR_MENUITEM_TYPE);
-
-	return self;
-}
-
diff --git a/src/calendar-menu-item.h b/src/calendar-menu-item.h
deleted file mode 100644
index 7a56f96..0000000
--- a/src/calendar-menu-item.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-Calendar menu item dbusmenu "transport" for the corresponding IDO widget.
-
-Copyright 2010 Canonical Ltd.
-
-Authors:
-    David Barth <david.barth@canonical.com>
-
-This program is free software: you can redistribute it and/or modify it 
-under the terms of the GNU General Public License version 3, as published 
-by the Free Software Foundation.
-
-This program is distributed in the hope that it will be useful, but 
-WITHOUT ANY WARRANTY; without even the implied warranties of 
-MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 
-PURPOSE.  See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along 
-with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef __CALENDAR_MENU_ITEM_H__
-#define __CALENDAR_MENU_ITEM_H__
-
-#include <glib.h>
-#include <glib-object.h>
-
-#include <libdbusmenu-glib/menuitem.h>
-
-G_BEGIN_DECLS
-
-#define CALENDAR_MENU_ITEM_TYPE            (calendar_menu_item_get_type ())
-#define CALENDAR_MENU_ITEM(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), CALENDAR_MENU_ITEM_TYPE, CalendarMenuItem))
-#define CALENDAR_MENU_ITEM_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), CALENDAR_MENU_ITEM_TYPE, CalendarMenuItemClass))
-#define IS_CALENDAR_MENU_ITEM(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CALENDAR_MENU_ITEM_TYPE))
-#define IS_CALENDAR_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CALENDAR_MENU_ITEM_TYPE))
-#define CALENDAR_MENU_ITEM_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), CALENDAR_MENU_ITEM_TYPE, CalendarMenuItemClass))
-
-#define CALENDAR_MENU_ITEM_SIGNAL_ACTIVATE   "activate"
-#define CALENDAR_MENUITEM_PROP_TEXT          "text"
-
-typedef struct _CalendarMenuItem      CalendarMenuItem;
-typedef struct _CalendarMenuItemClass CalendarMenuItemClass;
-
-struct _CalendarMenuItemClass {
-	DbusmenuMenuitemClass parent_class;
-};
-
-struct _CalendarMenuItem {
-	DbusmenuMenuitem parent;
-};
-
-GType calendar_menu_item_get_type (void);
-CalendarMenuItem * calendar_menu_item_new ();
-
-G_END_DECLS
-
-#endif /* __CALENDAR_MENU_ITEM_H__ */
-
-- 
cgit v1.2.3


From 65fc15683f751aa49a5cfb99a200d327125404b4 Mon Sep 17 00:00:00 2001
From: Gabor Kelemen <kelemeng@gnome.hu>
Date: Fri, 9 Sep 2011 11:47:20 +0200
Subject: Set translation domain before the gtk_builder_add_from_file call. LP:
 #845473

---
 src/datetime-prefs.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/datetime-prefs.c b/src/datetime-prefs.c
index e7fef5d..5ace8c4 100644
--- a/src/datetime-prefs.c
+++ b/src/datetime-prefs.c
@@ -653,6 +653,7 @@ indicator_datetime_panel_init (IndicatorDatetimePanel * self)
   GError * error = NULL;
 
   self->priv->builder = gtk_builder_new ();
+  gtk_builder_set_translation_domain (self->priv->builder, GETTEXT_PACKAGE);
   gtk_builder_add_from_file (self->priv->builder, DATETIME_DIALOG_UI_FILE, &error);
   if (error != NULL) {
     /* We have to abort, we can't continue without the ui file */
@@ -661,8 +662,6 @@ indicator_datetime_panel_init (IndicatorDatetimePanel * self)
     return;
   }
 
-  gtk_builder_set_translation_domain (self->priv->builder, GETTEXT_PACKAGE);
-
   GSettings * conf = g_settings_new (SETTINGS_INTERFACE);
 
 #define WIG(name) GTK_WIDGET (gtk_builder_get_object (self->priv->builder, name))
-- 
cgit v1.2.3