summaryrefslogtreecommitdiff
path: root/shell/clock.c
diff options
context:
space:
mode:
authorEmilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>2013-11-25 10:49:32 +0100
committerEmilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>2013-11-25 10:49:32 +0100
commit01c31060d2e3e2e96788e2a76d97ba334905ae05 (patch)
tree56f0c345f582e435b9af5f66d75819a44c93510e /shell/clock.c
parentb6a530e7ff1be463be5acf29ea9c5fc32ebaa52c (diff)
downloadgraynard-01c31060d2e3e2e96788e2a76d97ba334905ae05.tar.gz
graynard-01c31060d2e3e2e96788e2a76d97ba334905ae05.zip
Add a clock to the panel
Diffstat (limited to 'shell/clock.c')
-rw-r--r--shell/clock.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/shell/clock.c b/shell/clock.c
new file mode 100644
index 0000000..71076d5
--- /dev/null
+++ b/shell/clock.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2013 Collabora Ltd.
+ *
+ * Author: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
+ */
+
+#include "config.h"
+
+#include "clock.h"
+
+#include <gtk/gtk.h>
+
+#define GNOME_DESKTOP_USE_UNSTABLE_API
+#include <libgnome-desktop/gnome-wall-clock.h>
+
+enum {
+ PROP_0,
+};
+
+struct WestonGtkClockPrivate {
+ GnomeWallClock *wall_clock;
+};
+
+G_DEFINE_TYPE(WestonGtkClock, weston_gtk_clock, GTK_TYPE_LABEL)
+
+static void
+update_clock (GnomeWallClock *wall_clock,
+ GParamSpec *pspec,
+ WestonGtkClock *self)
+{
+ gtk_label_set_text (GTK_LABEL (self), gnome_wall_clock_get_clock (wall_clock));
+}
+
+static void
+weston_gtk_clock_dispose (GObject *object)
+{
+ WestonGtkClock *self = WESTON_GTK_CLOCK (object);
+
+ g_clear_object (&self->priv->wall_clock);
+
+ G_OBJECT_CLASS (weston_gtk_clock_parent_class)->dispose (object);
+}
+
+static void
+weston_gtk_clock_init (WestonGtkClock *self)
+{
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+ WESTON_GTK_CLOCK_TYPE,
+ WestonGtkClockPrivate);
+
+ self->priv->wall_clock = gnome_wall_clock_new ();
+ g_signal_connect (self->priv->wall_clock, "notify::clock",
+ G_CALLBACK (update_clock), self);
+ update_clock (self->priv->wall_clock, NULL, self);
+}
+
+static void
+weston_gtk_clock_class_init (WestonGtkClockClass *klass)
+{
+ GObjectClass *object_class = (GObjectClass *)klass;
+
+ object_class->dispose = weston_gtk_clock_dispose;
+
+ g_type_class_add_private (object_class, sizeof (WestonGtkClockPrivate));
+}
+
+GtkWidget *
+weston_gtk_clock_new (void)
+{
+ return g_object_new (WESTON_GTK_CLOCK_TYPE,
+ NULL);
+}