From d28ca4cdce0dd6f103af4e6227af985558c32e56 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 6 Jan 2014 10:30:15 -0500 Subject: [PATCH] Add an example for split headers This shows how to deal with variability in window decorations with split header bars. --- tests/Makefile.am | 2 + tests/testsplitheaders.c | 71 ++++++++++++++++ tests/testsplitheaders.ui | 174 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 247 insertions(+) create mode 100644 tests/testsplitheaders.c create mode 100644 tests/testsplitheaders.ui diff --git a/tests/Makefile.am b/tests/Makefile.am index 158749bb13..54633e32ee 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -140,6 +140,7 @@ noinst_PROGRAMS = $(TEST_PROGS) \ teststack \ testrevealer \ testtitlebar \ + testsplitheaders \ testwindowsize if USE_X11 @@ -515,6 +516,7 @@ EXTRA_DIST += \ merge-2.ui \ merge-3.ui \ gnome-textfile.png \ + testsplitheaders.ui \ makefile.msc diff --git a/tests/testsplitheaders.c b/tests/testsplitheaders.c new file mode 100644 index 0000000000..6be3ca9257 --- /dev/null +++ b/tests/testsplitheaders.c @@ -0,0 +1,71 @@ +#include + +static void +split_decorations (GObject *obj, + GParamSpec *pspec, + gpointer data) +{ + GtkBuilder *builder = data; + GtkWidget *sheader, *mheader; + gchar *layout, *p1, *p2; + gchar **p; + + sheader = gtk_builder_get_object (builder, "sidebar-header"); + mheader = gtk_builder_get_object (builder, "main-header"); + + g_object_get (obj, "gtk-decoration-layout", &layout, NULL); + + p = g_strsplit (layout, ":", -1); + + p1 = g_strconcat (p[0], ":", NULL); + p2 = g_strconcat (":", p[1], NULL); + + gtk_header_bar_set_decoration_layout (GTK_HEADER_BAR (sheader), p1); + gtk_header_bar_set_decoration_layout (GTK_HEADER_BAR (mheader), p2); + + g_free (p1); + g_free (p2); + g_strfreev (p); + g_free (layout); +} + +int +main (int argc, char *argv[]) +{ + GtkBuilder *builder; + GtkSettings *settings; + GtkWidget *win; + GtkWidget *entry; + GtkWidget *check; + GtkWidget *header; + + gtk_init (NULL, NULL); + + builder = gtk_builder_new_from_file ("testsplitheaders.ui"); + + win = gtk_builder_get_object (builder, "window"); + settings = gtk_widget_get_settings (win); + + g_signal_connect (settings, "notify::gtk-decoration-layout", + G_CALLBACK (split_decorations), builder); + split_decorations (settings, NULL, builder); + + entry = gtk_builder_get_object (builder, "layout-entry"); + g_object_bind_property (settings, "gtk-decoration-layout", + entry, "text", + G_BINDING_BIDIRECTIONAL|G_BINDING_SYNC_CREATE); + check = gtk_builder_get_object (builder, "decorations"); + header = gtk_builder_get_object (builder, "sidebar-header"); + g_object_bind_property (check, "active", + header, "show-close-button", + G_BINDING_DEFAULT); + header = gtk_builder_get_object (builder, "main-header"); + g_object_bind_property (check, "active", + header, "show-close-button", + G_BINDING_DEFAULT); + gtk_window_present (GTK_WINDOW (win)); + + gtk_main (); + + return 0; +} diff --git a/tests/testsplitheaders.ui b/tests/testsplitheaders.ui new file mode 100644 index 0000000000..ca68311b9c --- /dev/null +++ b/tests/testsplitheaders.ui @@ -0,0 +1,174 @@ + + + 600 + 400 + preferences-desktop-font + + + True + horizontal + + + True + + + True + center + + + end + + + + + + + True + + + + + True + True + + + True + horizontal + + + + True + < + center + + + + + True + > + center + + + + + start + + + + + + + + + True + horizontal + + + True + none + + + True + Bla + 0 + + + + + True + Bla bla + 0 + + + + + True + Bla bla bla + 0 + + + + + True + Bla bla bla bla + 0 + + + + + + + True + True + True + always + always + + + True + 20 + 10 + 10 + + + True + Layout + + + 0 + 0 + + + + + True + 25 + + + 1 + 0 + + + + + True + Decorations + + + 0 + 1 + + + + + True + + + 1 + 1 + + + + + + + + + + + horizontal + + + + + + + horizontal + + + + + +