summaryrefslogtreecommitdiff
path: root/tests/testsplitheaders.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2014-01-06 10:30:15 -0500
committerMatthias Clasen <mclasen@redhat.com>2014-01-06 10:32:19 -0500
commitd28ca4cdce0dd6f103af4e6227af985558c32e56 (patch)
tree9da9b878926e245592b170179ce84e612817fad2 /tests/testsplitheaders.c
parentf723113127ae5d61cbd53dae4404f4f7a4f9c05c (diff)
downloadgtk+-d28ca4cdce0dd6f103af4e6227af985558c32e56.tar.gz
Add an example for split headers
This shows how to deal with variability in window decorations with split header bars.
Diffstat (limited to 'tests/testsplitheaders.c')
-rw-r--r--tests/testsplitheaders.c71
1 files changed, 71 insertions, 0 deletions
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 <gtk/gtk.h>
+
+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;
+}