From 01c31060d2e3e2e96788e2a76d97ba334905ae05 Mon Sep 17 00:00:00 2001 From: Emilio Pozuelo Monfort Date: Mon, 25 Nov 2013 10:49:32 +0100 Subject: Add a clock to the panel --- shell/clock.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 shell/clock.c (limited to 'shell/clock.c') 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 + */ + +#include "config.h" + +#include "clock.h" + +#include + +#define GNOME_DESKTOP_USE_UNSTABLE_API +#include + +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); +} -- cgit v1.3.1