aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2010-08-30 16:18:29 -0500
committerTed Gould <ted@gould.cx>2010-08-30 16:18:29 -0500
commit3e00412e0950f6c4e0d27c5f046120017c38738c (patch)
treecebad16d76cb1961c7349539bc04e6356afd2db3
parent48830abd993c31546bad23cc30684a537c31332c (diff)
downloadayatana-indicator-datetime-3e00412e0950f6c4e0d27c5f046120017c38738c.tar.gz
ayatana-indicator-datetime-3e00412e0950f6c4e0d27c5f046120017c38738c.tar.bz2
ayatana-indicator-datetime-3e00412e0950f6c4e0d27c5f046120017c38738c.zip
Watching the timezone file and updating based on it
-rw-r--r--src/datetime-service.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/datetime-service.c b/src/datetime-service.c
index e6a5fc3..18dd073 100644
--- a/src/datetime-service.c
+++ b/src/datetime-service.c
@@ -23,6 +23,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#include <libindicator/indicator-service.h>
#include <glib/gi18n.h>
+#include <gio/gio.h>
#include <libdbusmenu-glib/server.h>
#include <libdbusmenu-glib/client.h>
@@ -168,6 +169,30 @@ 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)
+{
+ datetime_interface_update(DATETIME_INTERFACE(user_data));
+ update_datetime(NULL);
+ 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;
+}
+
/* Repsonds to the service object saying it's time to shutdown.
It stops the mainloop. */
static void
@@ -200,8 +225,12 @@ main (int argc, char ** argv)
dbusmenu_server_set_root(server, root);
build_menus(root);
+ /* Setup dbus interface */
dbus = g_object_new(DATETIME_INTERFACE_TYPE, NULL);
+ /* Setup timezone watch */
+ build_timezone(dbus);
+
mainloop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(mainloop);