summaryrefslogtreecommitdiff
path: root/shell
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
parentb6a530e7ff1be463be5acf29ea9c5fc32ebaa52c (diff)
downloadgraynard-01c31060d2e3e2e96788e2a76d97ba334905ae05.tar.gz
graynard-01c31060d2e3e2e96788e2a76d97ba334905ae05.zip
Add a clock to the panel
Diffstat (limited to 'shell')
-rw-r--r--shell/Makefile.am2
-rw-r--r--shell/clock.c72
-rw-r--r--shell/clock.h38
-rw-r--r--shell/gtk-shell.c5
4 files changed, 116 insertions, 1 deletions
diff --git a/shell/Makefile.am b/shell/Makefile.am
index 3bd6215..9fbaa93 100644
--- a/shell/Makefile.am
+++ b/shell/Makefile.am
@@ -13,6 +13,8 @@ weston_gtk_shell_SOURCES = \
gtk-shell.c \
app-launcher.c \
app-launcher.h \
+ clock.c \
+ clock.h \
launcher-grid.c \
launcher-grid.h \
shell-app-system.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 <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);
+}
diff --git a/shell/clock.h b/shell/clock.h
new file mode 100644
index 0000000..4493b88
--- /dev/null
+++ b/shell/clock.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2013 Collabora Ltd.
+ *
+ * Author: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
+ */
+
+#ifndef __WESTON_GTK_CLOCK_H__
+#define __WESTON_GTK_CLOCK_H__
+
+#include <gtk/gtk.h>
+
+#define WESTON_GTK_CLOCK_TYPE (weston_gtk_clock_get_type ())
+#define WESTON_GTK_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WESTON_GTK_CLOCK_TYPE, WestonGtkClock))
+#define WESTON_GTK_CLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WESTON_GTK_CLOCK_TYPE, WestonGtkClockClass))
+#define WESTON_GTK_IS_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WESTON_GTK_CLOCK_TYPE))
+#define WESTON_GTK_IS_CLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WESTON_GTK_CLOCK_TYPE))
+#define WESTON_GTK_CLOCK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WESTON_GTK_CLOCK_TYPE, WestonGtkClockClass))
+
+typedef struct WestonGtkClock WestonGtkClock;
+typedef struct WestonGtkClockClass WestonGtkClockClass;
+typedef struct WestonGtkClockPrivate WestonGtkClockPrivate;
+
+struct WestonGtkClock
+{
+ GtkLabel parent;
+
+ WestonGtkClockPrivate *priv;
+};
+
+struct WestonGtkClockClass
+{
+ GtkLabelClass parent_class;
+};
+
+GType weston_gtk_clock_get_type (void) G_GNUC_CONST;
+GtkWidget *weston_gtk_clock_new (void);
+
+#endif /* __WESTON_GTK_CLOCK_H__ */
diff --git a/shell/gtk-shell.c b/shell/gtk-shell.c
index 4467095..dc94591 100644
--- a/shell/gtk-shell.c
+++ b/shell/gtk-shell.c
@@ -6,6 +6,7 @@
#include "desktop-shell-client-protocol.h"
#include "launcher-grid.h"
+#include "clock.h"
extern char **environ; /* defined by libc */
@@ -131,7 +132,9 @@ panel_create(struct desktop *desktop)
gtk_box_pack_start (GTK_BOX(box1), button, FALSE, FALSE, 0);
gtk_widget_show (button);
- gtk_widget_show (box1);
+ gtk_box_pack_end (GTK_BOX(box1), weston_gtk_clock_new (), FALSE, FALSE, 6);
+
+ gtk_widget_show_all (box1);
gdk_window = gtk_widget_get_window(panel->window);
gdk_wayland_window_set_use_custom_surface(gdk_window);