diff options
| author | Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk> | 2013-11-25 10:49:32 +0100 |
|---|---|---|
| committer | Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk> | 2013-11-25 10:49:32 +0100 |
| commit | 01c31060d2e3e2e96788e2a76d97ba334905ae05 (patch) | |
| tree | 56f0c345f582e435b9af5f66d75819a44c93510e /shell | |
| parent | b6a530e7ff1be463be5acf29ea9c5fc32ebaa52c (diff) | |
| download | graynard-01c31060d2e3e2e96788e2a76d97ba334905ae05.tar.gz graynard-01c31060d2e3e2e96788e2a76d97ba334905ae05.zip | |
Add a clock to the panel
Diffstat (limited to 'shell')
| -rw-r--r-- | shell/Makefile.am | 2 | ||||
| -rw-r--r-- | shell/clock.c | 72 | ||||
| -rw-r--r-- | shell/clock.h | 38 | ||||
| -rw-r--r-- | shell/gtk-shell.c | 5 |
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); |
