summaryrefslogtreecommitdiff
path: root/shell/gtk-shell.c
diff options
context:
space:
mode:
authorJonny Lamb <jonny.lamb@collabora.co.uk>2014-02-14 13:18:07 +0100
committerJonny Lamb <jonny.lamb@collabora.co.uk>2014-02-17 20:17:45 +0100
commit50a52832f87b30e008059b01b954e31c49984bbc (patch)
tree6f7b365910088c08b7154cfb52f738845dad08e9 /shell/gtk-shell.c
parentee57ae33024d5cf18190dba888317494238d5e4f (diff)
downloadgraynard-50a52832f87b30e008059b01b954e31c49984bbc.tar.gz
graynard-50a52832f87b30e008059b01b954e31c49984bbc.zip
shell: add clock
Diffstat (limited to 'shell/gtk-shell.c')
-rw-r--r--shell/gtk-shell.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/shell/gtk-shell.c b/shell/gtk-shell.c
index 355a73a..76332b3 100644
--- a/shell/gtk-shell.c
+++ b/shell/gtk-shell.c
@@ -37,6 +37,7 @@ struct desktop {
struct element *background;
struct element *panel;
struct element *launcher_grid;
+ struct element *clock;
guint initial_panel_timeout_id;
guint hide_panel_idle_id;
@@ -63,6 +64,11 @@ connect_enter_leave_signals (gpointer data)
g_signal_connect (desktop->panel->window, "leave-notify-event",
G_CALLBACK (panel_window_leave_cb), desktop);
+ g_signal_connect (desktop->clock->window, "enter-notify-event",
+ G_CALLBACK (panel_window_enter_cb), desktop);
+ g_signal_connect (desktop->clock->window, "leave-notify-event",
+ G_CALLBACK (panel_window_leave_cb), desktop);
+
return FALSE;
}
@@ -97,6 +103,12 @@ desktop_shell_configure(void *data,
desktop->panel->surface,
0, (height - window_height) / 2);
+ gtk_window_resize (GTK_WINDOW (desktop->clock->window), 56*2.6, 56*2);
+
+ shell_helper_move_surface(desktop->helper,
+ desktop->clock->surface,
+ 56, (height - window_height) / 2);
+
desktop_shell_desktop_ready(desktop->shell);
/* TODO: why does the panel signal leave on drawing for
@@ -157,6 +169,38 @@ launcher_grid_toggle (GtkWidget *widget, struct desktop *desktop)
gtk_widget_set_visible (desktop->launcher_grid->window, !grid_visible);
}
+static GtkWidget *
+clock_create (struct desktop *desktop)
+{
+ struct element *clock;
+ GtkWidget *widget;
+ GdkWindow *gdk_window;
+
+ clock = malloc(sizeof *clock);
+ memset(clock, 0, sizeof *clock);
+
+ clock->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(clock->window), "gtk shell");
+ gtk_window_set_decorated(GTK_WINDOW(clock->window), FALSE);
+ gtk_widget_realize(clock->window);
+
+ gtk_style_context_add_class (gtk_widget_get_style_context (clock->window),
+ "wgs-clock");
+
+ widget = gtk_label_new ("");
+ gtk_label_set_markup (GTK_LABEL (widget), "<span font=\"Droid Sans 32\">11:47</span>\n"
+ "<span font=\"Droid Sans 12\">13/02/2014</span>");
+ gtk_label_set_justify (GTK_LABEL (widget), GTK_JUSTIFY_CENTER);
+ gtk_container_add (GTK_CONTAINER (clock->window), widget);
+
+ gdk_window = gtk_widget_get_window(clock->window);
+ clock->surface = gdk_wayland_window_get_wl_surface(gdk_window);
+
+ gtk_widget_show_all (clock->window);
+
+ desktop->clock = clock;
+}
+
static gboolean
panel_window_enter_cb (GtkWidget *widget,
GdkEventCrossing *event,
@@ -175,6 +219,8 @@ panel_window_enter_cb (GtkWidget *widget,
shell_helper_slide_surface_back(desktop->helper,
desktop->panel->surface);
+ shell_helper_slide_surface_back(desktop->helper,
+ desktop->clock->surface);
return FALSE;
}
@@ -193,6 +239,9 @@ leave_panel_idle_cb (gpointer data)
shell_helper_slide_surface(desktop->helper,
desktop->panel->surface,
-31, 0);
+ shell_helper_slide_surface(desktop->helper,
+ desktop->clock->surface,
+ 25 - 56 - width, 0);
return FALSE;
}
@@ -251,6 +300,7 @@ panel_create(struct desktop *desktop)
gtk_container_add (GTK_CONTAINER (panel->window), box1);
/* TODO: clock */
+ clock_create(desktop);
/* TODO: wifi */
image = gtk_image_new_from_icon_name ("network-wireless-signal-excellent-symbolic",