[glade/headerbar: 2/8] Add a headerbar editor



commit 961733bce5c00703d67727b83f006f6622ff783c
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Nov 2 17:51:18 2014 -0500

    Add a headerbar editor
    
    Among other things, this lets us undoably remove a custom title
    widget.

 plugins/gtk+/Makefile.am                       |    3 +
 plugins/gtk+/glade-gtk-header-bar.c            |   12 +
 plugins/gtk+/glade-gtk-resources.gresource.xml |    1 +
 plugins/gtk+/glade-header-bar-editor.c         |  168 +++++++++++++
 plugins/gtk+/glade-header-bar-editor.h         |   57 +++++
 plugins/gtk+/glade-header-bar-editor.ui        |  306 ++++++++++++++++++++++++
 plugins/gtk+/gtk+.xml.in                       |   18 ++-
 7 files changed, 562 insertions(+), 3 deletions(-)
---
diff --git a/plugins/gtk+/Makefile.am b/plugins/gtk+/Makefile.am
index 3b4701d..fbff8bc 100644
--- a/plugins/gtk+/Makefile.am
+++ b/plugins/gtk+/Makefile.am
@@ -119,6 +119,7 @@ libgladegtk_la_SOURCES =            \
        glade-gtk-widget.c              \
        glade-gtk-window.c              \
        glade-gtk-header-bar.c          \
+       glade-header-bar-editor.c       \
        glade-icon-factory-editor.c     \
        glade-icon-sources.c            \
        glade-icon-view-editor.c        \
@@ -195,6 +196,7 @@ noinst_HEADERS =                    \
        glade-gtk-menu-shell.h          \
        glade-gtk-notebook.h            \
        glade-gtk-tree-view.h           \
+       glade-header-bar-editor.h       \
        glade-icon-factory-editor.h     \
        glade-icon-sources.h            \
        glade-icon-view-editor.h        \
@@ -273,6 +275,7 @@ UI_FILES =                          \
        glade-font-chooser-editor.ui    \
        glade-font-chooser-widget-editor.ui \
        glade-grid-editor.ui            \
+       glade-header-bar-editor.ui      \
        glade-icon-view-editor.ui       \
        glade-image-editor.ui           \
        glade-label-editor.ui           \
diff --git a/plugins/gtk+/glade-gtk-header-bar.c b/plugins/gtk+/glade-gtk-header-bar.c
index 5d8ef44..55ede2f 100644
--- a/plugins/gtk+/glade-gtk-header-bar.c
+++ b/plugins/gtk+/glade-gtk-header-bar.c
@@ -3,6 +3,8 @@
 #include <gladeui/glade.h>
 #include "glade-gtk.h"
 
+#include "glade-header-bar-editor.h"
+
 static gint
 glade_gtk_header_bar_get_num_children (GObject *hb, GtkPackType type)
 {
@@ -324,3 +326,13 @@ glade_gtk_header_bar_replace_child (GladeWidgetAdaptor * adaptor,
                                            G_OBJECT (current),
                                            G_OBJECT (new_widget));
 }
+
+GladeEditable *
+glade_gtk_header_bar_create_editable (GladeWidgetAdaptor * adaptor,
+                                      GladeEditorPageType  type)
+{
+  if (type == GLADE_PAGE_GENERAL)
+    return (GladeEditable *) glade_header_bar_editor_new ();
+  else
+    return GWA_GET_CLASS (GTK_TYPE_CONTAINER)->create_editable (adaptor, type);
+}
diff --git a/plugins/gtk+/glade-gtk-resources.gresource.xml b/plugins/gtk+/glade-gtk-resources.gresource.xml
index d0698d0..4052b02 100644
--- a/plugins/gtk+/glade-gtk-resources.gresource.xml
+++ b/plugins/gtk+/glade-gtk-resources.gresource.xml
@@ -21,6 +21,7 @@
     <file compressed="true" preprocess="xml-stripblanks">glade-font-chooser-editor.ui</file>
     <file compressed="true" preprocess="xml-stripblanks">glade-font-chooser-widget-editor.ui</file>
     <file compressed="true" preprocess="xml-stripblanks">glade-grid-editor.ui</file>
+    <file compressed="true" preprocess="xml-stripblanks">glade-header-bar-editor.ui</file>
     <file compressed="true" preprocess="xml-stripblanks">glade-icon-view-editor.ui</file>
     <file compressed="true" preprocess="xml-stripblanks">glade-image-editor.ui</file>
     <file compressed="true" preprocess="xml-stripblanks">glade-label-editor.ui</file>
diff --git a/plugins/gtk+/glade-header-bar-editor.c b/plugins/gtk+/glade-header-bar-editor.c
new file mode 100644
index 0000000..344edb1
--- /dev/null
+++ b/plugins/gtk+/glade-header-bar-editor.c
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public 
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Authors:
+ *   Matthias Clasen <mclasen redhat com>
+ */
+
+#include <config.h>
+#include <gladeui/glade.h>
+#include <glib/gi18n-lib.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "glade-header-bar-editor.h"
+
+static void glade_header_bar_editor_editable_init (GladeEditableIface * iface);
+static void glade_header_bar_editor_grab_focus    (GtkWidget          * widget);
+
+static void use_custom_title_toggled (GtkWidget *widget, GladeHeaderBarEditor * editor);
+
+struct _GladeHeaderBarEditorPrivate
+{
+  GtkWidget *embed;
+  GtkWidget *use_custom_title_check;
+};
+
+static GladeEditableIface *parent_editable_iface;
+
+G_DEFINE_TYPE_WITH_CODE (GladeHeaderBarEditor, glade_header_bar_editor, GLADE_TYPE_EDITOR_SKELETON,
+                         G_ADD_PRIVATE (GladeHeaderBarEditor)
+                         G_IMPLEMENT_INTERFACE (GLADE_TYPE_EDITABLE,
+                                                glade_header_bar_editor_editable_init))
+
+static void
+glade_header_bar_editor_class_init (GladeHeaderBarEditorClass * klass)
+{
+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+  widget_class->grab_focus = glade_header_bar_editor_grab_focus;
+
+  gtk_widget_class_set_template_from_resource (widget_class, 
"/org/gnome/gladegtk/glade-header-bar-editor.ui");
+  gtk_widget_class_bind_template_child_private (widget_class, GladeHeaderBarEditor, embed);
+  gtk_widget_class_bind_template_child_private (widget_class, GladeHeaderBarEditor, use_custom_title_check);
+  gtk_widget_class_bind_template_callback (widget_class, use_custom_title_toggled);
+}
+
+static void
+glade_header_bar_editor_init (GladeHeaderBarEditor * self)
+{
+  self->priv = glade_header_bar_editor_get_instance_private (self);
+
+  gtk_widget_init_template (GTK_WIDGET (self));
+}
+
+static void
+glade_header_bar_editor_grab_focus (GtkWidget * widget)
+{
+  GladeHeaderBarEditor *editor = GLADE_HEADER_BAR_EDITOR (widget);
+
+  gtk_widget_grab_focus (editor->priv->embed);
+}
+
+static void
+glade_header_bar_editor_load (GladeEditable *editable,
+                              GladeWidget   *gwidget)
+{
+  GladeHeaderBarEditor *editor = GLADE_HEADER_BAR_EDITOR (editable);
+  GladeHeaderBarEditorPrivate *priv = editor->priv;
+
+  /* Chain up to default implementation */
+  parent_editable_iface->load (editable, gwidget);
+
+  if (gwidget)
+    {
+      gboolean setting;
+
+      glade_widget_property_get (gwidget, "use-custom-title", &setting);
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->use_custom_title_check), setting);
+    }
+}
+
+static void
+glade_header_bar_editor_editable_init (GladeEditableIface * iface)
+{
+  parent_editable_iface = g_type_interface_peek_parent (iface);
+
+  iface->load = glade_header_bar_editor_load;
+}
+
+static void
+use_custom_title_toggled (GtkWidget            *widget,
+                          GladeHeaderBarEditor *editor)
+{
+  GladeHeaderBarEditorPrivate *priv = editor->priv;
+  GladeWidget   *gwidget = glade_editable_loaded_widget (GLADE_EDITABLE (editor));
+  GladeWidget   *gtitle = NULL;
+  GtkWidget     *headerbar;
+  GtkWidget     *title;
+  GladeProperty *property;
+  gboolean       use_custom_title;
+
+  if (glade_editable_loading (GLADE_EDITABLE (editor)) || !gwidget)
+    return;
+
+  /* Get new desired property state */
+  use_custom_title = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->use_custom_title_check));
+
+  headerbar = (GtkWidget *)glade_widget_get_object (gwidget);
+  title = gtk_header_bar_get_custom_title (GTK_HEADER_BAR (headerbar));
+
+  if (title && !GLADE_IS_PLACEHOLDER (title))
+    gtitle = glade_widget_get_from_gobject (title);
+
+  glade_editable_block (GLADE_EDITABLE (editor));
+
+  if (use_custom_title)
+    glade_command_push_group (_("Setting %s to use a custom title"),
+                              glade_widget_get_name (gwidget));
+  else
+    glade_command_push_group (_("Setting %s to use the standard title"),
+                              glade_widget_get_name (gwidget));
+
+  if (gtitle)
+    {
+      GList list;
+      list.prev = list.next = NULL;
+      list.data = gtitle;
+      glade_command_delete (&list);
+    }
+
+  property = glade_widget_get_property (gwidget, "use-custom-title");
+  glade_command_set_property (property, use_custom_title);
+
+  if (use_custom_title)
+    {
+      property = glade_widget_get_property (gwidget, "title");
+      glade_command_set_property (property, NULL);
+      property = glade_widget_get_property (gwidget, "subtitle");
+      glade_command_set_property (property, NULL);
+      property = glade_widget_get_property (gwidget, "has-subtitle");
+      glade_command_set_property (property, TRUE);
+    }
+
+  glade_command_pop_group ();
+
+  glade_editable_unblock (GLADE_EDITABLE (editor));
+
+  glade_editable_load (GLADE_EDITABLE (editor), gwidget);
+}
+
+GtkWidget *
+glade_header_bar_editor_new (void)
+{
+  return g_object_new (GLADE_TYPE_HEADER_BAR_EDITOR, NULL);
+}
diff --git a/plugins/gtk+/glade-header-bar-editor.h b/plugins/gtk+/glade-header-bar-editor.h
new file mode 100644
index 0000000..865b516
--- /dev/null
+++ b/plugins/gtk+/glade-header-bar-editor.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public 
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Authors:
+ *   Matthias Clasen <mclasen redhat com>
+ */
+#ifndef _GLADE_HEADER_BAR_EDITOR_H_
+#define _GLADE_HEADER_BAR_EDITOR_H_
+
+#include <gtk/gtk.h>
+#include <gladeui/glade.h>
+
+G_BEGIN_DECLS
+
+#define GLADE_TYPE_HEADER_BAR_EDITOR               (glade_header_bar_editor_get_type ())
+#define GLADE_HEADER_BAR_EDITOR(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
GLADE_TYPE_HEADER_BAR_EDITOR, GladeHeaderBarEditor))
+#define GLADE_HEADER_BAR_EDITOR_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST ((klass), 
GLADE_TYPE_HEADER_BAR_EDITOR, GladeHeaderBarEditorClass))
+#define GLADE_IS_HEADER_BAR_EDITOR(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
GLADE_TYPE_HEADER_BAR_EDITOR))
+#define GLADE_IS_HEADER_BAR_EDITOR_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), 
GLADE_TYPE_HEADER_BAR_EDITOR))
+#define GLADE_HEADER_BAR_EDITOR_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), 
GLADE_TYPE_HEADER_BAR_EDITOR, GladeHeaderBarEditorClass))
+
+typedef struct _GladeHeaderBarEditor        GladeHeaderBarEditor;
+typedef struct _GladeHeaderBarEditorClass   GladeHeaderBarEditorClass;
+typedef struct _GladeHeaderBarEditorPrivate GladeHeaderBarEditorPrivate;
+
+struct _GladeHeaderBarEditor
+{
+  GladeEditorSkeleton  parent;
+
+  GladeHeaderBarEditorPrivate *priv;
+};
+
+struct _GladeHeaderBarEditorClass
+{
+  GladeEditorSkeletonClass parent;
+};
+
+GType            glade_header_bar_editor_get_type       (void) G_GNUC_CONST;
+GtkWidget       *glade_header_bar_editor_new            (void);
+
+G_END_DECLS
+
+#endif  /* _GLADE_HEADER_BAR_EDITOR_H_ */
diff --git a/plugins/gtk+/glade-header-bar-editor.ui b/plugins/gtk+/glade-header-bar-editor.ui
new file mode 100644
index 0000000..365f19a
--- /dev/null
+++ b/plugins/gtk+/glade-header-bar-editor.ui
@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.0 
+
+libgladegtk - Glade UI Designer Gtk+ support plugin
+Copyright (C) 2014 Red Hat, Inc.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Author: Matthias Clasen <mclasen redhat com>
+
+-->
+<interface domain="glade">
+  <requires lib="gtk+" version="3.10"/>
+  <requires lib="gladeui" version="0.0"/>
+  <template class="GladeHeaderBarEditor" parent="GladeEditorSkeleton">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="orientation">vertical</property>
+    <child>
+      <object class="GtkGrid" id="grid">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="row_spacing">6</property>
+        <property name="column_spacing">6</property>
+        <child>
+          <object class="GladeEditorTable" id="embed">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+            <property name="width">6</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="title">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="valign">center</property>
+            <property name="label" translatable="yes">Headerbar Attributes</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+            <property name="width">6</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkCheckButton" id="use_custom_title_check">
+            <property name="label" translatable="yes">Custom title</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="tooltip-text" translatable="yes">Whether the headerbar should use a custom title 
widget.</property>
+            <property name="margin_left">12</property>
+            <property name="xalign">0</property>
+            <property name="draw_indicator">True</property>
+            <signal name="toggled" handler="use_custom_title_toggled"/>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">2</property>
+            <property name="width">6</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyLabel" id="title_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">title</property>
+            <property name="sensitive" bind-source="use_custom_title_check" bind-property="active" 
bind-flags="invert-boolean"/>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">3</property>
+            <property name="width">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="title_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">title</property>
+            <property name="sensitive" bind-source="use_custom_title_check" bind-property="active" 
bind-flags="invert-boolean"/>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">3</property>
+            <property name="width">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyLabel" id="subtitle_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">subtitle</property>
+            <property name="sensitive" bind-source="use_custom_title_check" bind-property="active" 
bind-flags="invert-boolean"/>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">4</property>
+            <property name="width">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="subtitle_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">subtitle</property>
+            <property name="sensitive" bind-source="use_custom_title_check" bind-property="active" 
bind-flags="invert-boolean"/>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">4</property>
+            <property name="width">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="has_subtitle_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">has-subtitle</property>
+            <property name="editor_type">GladeEpropCheck</property>
+            <property name="sensitive" bind-source="use_custom_title_check" bind-property="active" 
bind-flags="invert-boolean"/>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">5</property>
+            <property name="width">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="show_decoration_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="margin_left">12</property>
+            <property name="property_name">show-close-button</property>
+            <property name="editor_type">GladeEpropCheck</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">6</property>
+            <property name="width">6</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyLabel" id="decoration_layout_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">decoration-layout</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">7</property>
+            <property name="width">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="decoration_layout_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">decoration-layout</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">7</property>
+            <property name="width">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyLabel" id="spacing_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">spacing</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">8</property>
+            <property name="width">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="spacing_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">spacing</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">8</property>
+            <property name="width">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyLabel" id="start_size_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">start-size</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">9</property>
+            <property name="width">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="start_size_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">start-size</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">9</property>
+            <property name="width">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyLabel" id="end_size_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">end-size</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">10</property>
+            <property name="width">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="end_size_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">end-size</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">10</property>
+            <property name="width">4</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+    <child-editors>
+      <editor id="embed"/>
+      <editor id="title_label"/>
+      <editor id="title_editor"/>
+      <editor id="subtitle_label"/>
+      <editor id="subtitle_editor"/>
+      <editor id="has_subtitle_editor"/>
+      <editor id="show_decoration_editor"/>
+      <editor id="decoration_layout_label"/>
+      <editor id="decoration_layout_editor"/>
+      <editor id="spacing_label"/>
+      <editor id="spacing_editor"/>
+      <editor id="start_size_label"/>
+      <editor id="start_size_editor"/>
+      <editor id="end_size_label"/>
+      <editor id="end_size_editor"/>
+    </child-editors>
+  </template>
+</interface>
diff --git a/plugins/gtk+/gtk+.xml.in b/plugins/gtk+/gtk+.xml.in
index b3a2ebe..3ffb238 100644
--- a/plugins/gtk+/gtk+.xml.in
+++ b/plugins/gtk+/gtk+.xml.in
@@ -2409,22 +2409,34 @@
       <add-child-function>glade_gtk_header_bar_add_child</add-child-function>
       <remove-child-function>glade_gtk_header_bar_remove_child</remove-child-function>
       <replace-child-function>glade_gtk_header_bar_replace_child</replace-child-function>
+      <create-editable-function>glade_gtk_header_bar_create_editable</create-editable-function>
       <special-child-type>type</special-child-type>
       <properties>
+       <property id="title" custom-layout="True"/>
+       <property id="subtitle" custom-layout="True"/>
+       <property id="has-subtitle" _name="Reserve space for subtitle" custom-layout="True">
+          <_tooltip>Keep the headerbar height the same as the subtitle changes dynamically.</_tooltip>
+        </property>
+       <property id="show-close-button" _name="Show window controls" custom-layout="True">
+          <_tooltip>Whether to show window controls, e.g. a close button</_tooltip>
+        </property>
+       <property id="spacing" custom-layout="True"/>
+       <property id="decoration-layout" _name="Decoration Layout" optional="True" optional-default="False" 
custom-layout="True"/>
+        <property id="decoration-layout-set" disabled="True"/>
         <property id="custom-title" disabled="True"/>
-        <property id="use-custom-title" _name="Custom Title" default="FALSE" visible="True" save="False">
+        <property id="use-custom-title" _name="Custom Title" default="FALSE" visible="True" save="False" 
custom-layout="True">
           <parameter-spec>
             <type>GParamBoolean</type>
           </parameter-spec>
         </property>
-        <property visible="True" save="False" id="start-size" default="1" _name="Number of items at the 
start">
+        <property visible="True" save="False" id="start-size" default="1" _name="Number of items at the 
start" custom-layout="True">
           <parameter-spec>
             <type>GParamInt</type>
             <min>0</min>
           </parameter-spec>
           <_tooltip>The number of items at the start</_tooltip>
         </property>
-        <property visible="True" save="False" id="end-size" default="1" _name="Number of items at the end">
+        <property visible="True" save="False" id="end-size" default="1" _name="Number of items at the end" 
custom-layout="True">
           <parameter-spec>
             <type>GParamInt</type>
             <min>0</min>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]