[gtk+] Add an example for split headers
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Add an example for split headers
- Date: Mon, 6 Jan 2014 15:32:28 +0000 (UTC)
commit d28ca4cdce0dd6f103af4e6227af985558c32e56
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Jan 6 10:30:15 2014 -0500
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(+), 0 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 158749b..54633e3 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 0000000..6be3ca9
--- /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;
+}
diff --git a/tests/testsplitheaders.ui b/tests/testsplitheaders.ui
new file mode 100644
index 0000000..ca68311
--- /dev/null
+++ b/tests/testsplitheaders.ui
@@ -0,0 +1,174 @@
+<interface>
+ <object class="GtkWindow" id="window">
+ <property name="default-width">600</property>
+ <property name="default-height">400</property>
+ <property name="icon-name">preferences-desktop-font</property>
+ <child type="titlebar">
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <child>
+ <object class="GtkHeaderBar" id="sidebar-header">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkCheckButton">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparator">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkHeaderBar" id="main-header">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <style>
+ <class name="linked"/>
+ </style>
+ <child>
+ <object class="GtkButton">
+ <property name="visible">True</property>
+ <property name="label"><</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton">
+ <property name="visible">True</property>
+ <property name="label">></property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="pack-type">start</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <child>
+ <object class="GtkListBox" id="sidebar-content">
+ <property name="visible">True</property>
+ <property name="selection-mode">none</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="label">Bla</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="label">Bla bla</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="label">Bla bla bla</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="label">Bla bla bla bla</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="main-content">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="hscrollbar-policy">always</property>
+ <property name="vscrollbar-policy">always</property>
+ <child>
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="margin">20</property>
+ <property name="row-spacing">10</property>
+ <property name="column-spacing">10</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="label">Layout</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="layout-entry">
+ <property name="visible">True</property>
+ <property name="width-chars">25</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="label">Decorations</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="decorations">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkSizeGroup">
+ <property name="mode">horizontal</property>
+ <widgets>
+ <widget name="sidebar-header"/>
+ <widget name="sidebar-content"/>
+ </widgets>
+ </object>
+ <object class="GtkSizeGroup">
+ <property name="mode">horizontal</property>
+ <widgets>
+ <widget name="main-header"/>
+ <widget name="main-content"/>
+ </widgets>
+ </object>
+</interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]