diff --git a/doc/adwaita-docs.xml b/doc/adwaita-docs.xml
index 9111c0770d9d80434ef4c91de5503ea75a478a93..f40c45127d9889825231c73070e8524a32ddfbfa 100644
--- a/doc/adwaita-docs.xml
+++ b/doc/adwaita-docs.xml
@@ -52,7 +52,6 @@
-
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 78cb8a099bf31351cc35fba3c371d0346ef2f411..54a5c4b1c9eb7e749f7f521b0a389c8a39dacb82 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -11,7 +11,6 @@ src/adw-deck.c
src/adw-expander-row.c
src/adw-flap.c
src/adw-header-bar.c
-src/adw-header-group.c
src/adw-keypad-button.c
src/adw-keypad.c
src/adw-leaflet.c
diff --git a/src/adw-enums.c.in b/src/adw-enums.c.in
index 06cbcf1679fc439beca58d942ad9bebf03fe8f73..17592561d6d78dd2dda0823844bb7a43e42d439e 100644
--- a/src/adw-enums.c.in
+++ b/src/adw-enums.c.in
@@ -4,7 +4,6 @@
#include "adw-enums.h"
#include "adw-flap.h"
#include "adw-header-bar.h"
-#include "adw-header-group.h"
#include "adw-leaflet.h"
#include "adw-navigation-direction.h"
#include "adw-squeezer.h"
diff --git a/src/adw-header-group.c b/src/adw-header-group.c
deleted file mode 100644
index b4853ebedb9375756400e5da6566de262dcb5416..0000000000000000000000000000000000000000
--- a/src/adw-header-group.c
+++ /dev/null
@@ -1,1115 +0,0 @@
-/*
- * Copyright (C) 2018 Purism SPC
- *
- * SPDX-License-Identifier: LGPL-2.1+
- */
-
-#include "config.h"
-#include
-
-#include "adw-header-group.h"
-
-/**
- * SECTION:adw-header-group
- * @short_description: An object handling composite title bars.
- * @Title: AdwHeaderGroup
- * @See_also: #GtkHeaderBar, #AdwHeaderBar, #AdwLeaflet
- *
- * The #AdwHeaderGroup object handles the header bars of a composite title bar.
- * It splits the window decoration across the header bars, giving the left side
- * of the decorations to the leftmost header bar, and the right side of the
- * decorations to the rightmost header bar.
- * See adw_header_bar_set_decoration_layout().
- *
- * The #AdwHeaderGroup:decorate-all property can be used in conjunction with
- * #AdwLeaflet:folded when the title bar is split across the pages of a
- * #AdwLeaflet to automatically display the decorations on all the pages when
- * the leaflet is folded.
- *
- * You can nest header groups, which is convenient when you nest leaflets too:
- * |[
- *
- *
- * ]|
- *
- * Since: 1.0
- */
-
-/**
- * AdwHeaderGroupChildType:
- * @ADW_HEADER_GROUP_CHILD_TYPE_HEADER_BAR: The child is a #AdwHeaderBar
- * @ADW_HEADER_GROUP_CHILD_TYPE_GTK_HEADER_BAR: The child is a #GtkHeaderBar
- * @ADW_HEADER_GROUP_CHILD_TYPE_HEADER_GROUP: The child is a #AdwHeaderGroup
- *
- * This enumeration value describes the child types handled by #AdwHeaderGroup.
- *
- * New values may be added to this enumeration over time.
- *
- * Since: 1.0
- */
-
-struct _AdwHeaderGroupChild
-{
- GObject parent_instance;
-
- AdwHeaderGroupChildType type;
- GObject *object;
-};
-
-enum {
- SIGNAL_UPDATE_DECORATION_LAYOUTS,
- SIGNAL_LAST_SIGNAL,
-};
-
-static guint signals[SIGNAL_LAST_SIGNAL];
-
-G_DEFINE_TYPE (AdwHeaderGroupChild, adw_header_group_child, G_TYPE_OBJECT)
-
-struct _AdwHeaderGroup
-{
- GObject parent_instance;
-
- GSList *children;
- gboolean decorate_all;
- gchar *layout;
-};
-
-static void adw_header_group_buildable_init (GtkBuildableIface *iface);
-static gboolean adw_header_group_buildable_custom_tag_start (GtkBuildable *buildable,
- GtkBuilder *builder,
- GObject *child,
- const gchar *tagname,
- GtkBuildableParser *parser,
- gpointer *data);
-static void adw_header_group_buildable_custom_finished (GtkBuildable *buildable,
- GtkBuilder *builder,
- GObject *child,
- const gchar *tagname,
- gpointer user_data);
-
-G_DEFINE_TYPE_WITH_CODE (AdwHeaderGroup, adw_header_group, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
- adw_header_group_buildable_init))
-
-enum {
- PROP_0,
- PROP_DECORATE_ALL,
- N_PROPS
-};
-
-static GParamSpec *props [N_PROPS];
-
-static void update_decoration_layouts (AdwHeaderGroup *self);
-
-static void
-object_destroyed_cb (AdwHeaderGroupChild *self,
- GObject *object)
-{
- g_assert (ADW_IS_HEADER_GROUP_CHILD (self));
-
- self->object = NULL;
-
- g_object_unref (self);
-}
-
-static void
-forward_update_decoration_layouts (AdwHeaderGroupChild *self)
-{
- AdwHeaderGroup *header_group;
-
- g_assert (ADW_IS_HEADER_GROUP_CHILD (self));
-
- header_group = ADW_HEADER_GROUP (g_object_get_data (G_OBJECT (self), "header-group"));
-
- g_assert (ADW_IS_HEADER_GROUP (header_group));
-
- g_signal_emit (header_group, signals[SIGNAL_UPDATE_DECORATION_LAYOUTS], 0);
-
- update_decoration_layouts (header_group);
-}
-
-static void
-adw_header_group_child_dispose (GObject *object)
-{
- AdwHeaderGroupChild *self = (AdwHeaderGroupChild *)object;
-
- if (self->object) {
-
- switch (self->type) {
- case ADW_HEADER_GROUP_CHILD_TYPE_HEADER_BAR:
- case ADW_HEADER_GROUP_CHILD_TYPE_GTK_HEADER_BAR:
- g_signal_handlers_disconnect_by_func (self->object, G_CALLBACK (object_destroyed_cb), self);
- g_signal_handlers_disconnect_by_func (self->object, G_CALLBACK (forward_update_decoration_layouts), self);
- break;
- case ADW_HEADER_GROUP_CHILD_TYPE_HEADER_GROUP:
- g_object_weak_unref (self->object, (GWeakNotify) object_destroyed_cb, self);
- break;
- default:
- g_assert_not_reached ();
- }
-
- self->object = NULL;
- }
-
- G_OBJECT_CLASS (adw_header_group_child_parent_class)->dispose (object);
-}
-
-static AdwHeaderGroupChild *
-adw_header_group_child_new_for_header_bar (AdwHeaderBar *header_bar)
-{
- AdwHeaderGroupChild *self;
- gpointer header_group;
-
- g_return_val_if_fail (ADW_IS_HEADER_BAR (header_bar), NULL);
-
- header_group = g_object_get_data (G_OBJECT (header_bar), "header-group");
-
- g_return_val_if_fail (header_group == NULL, NULL);
-
- self = g_object_new (ADW_TYPE_HEADER_GROUP_CHILD, NULL);
- self->type = ADW_HEADER_GROUP_CHILD_TYPE_HEADER_BAR;
- self->object = G_OBJECT (header_bar);
-
- g_signal_connect_swapped (header_bar, "destroy", G_CALLBACK (object_destroyed_cb), self);
-
- g_signal_connect_swapped (header_bar, "map", G_CALLBACK (forward_update_decoration_layouts), self);
- g_signal_connect_swapped (header_bar, "unmap", G_CALLBACK (forward_update_decoration_layouts), self);
-
- return self;
-}
-
-static AdwHeaderGroupChild *
-adw_header_group_child_new_for_gtk_header_bar (GtkHeaderBar *header_bar)
-{
- AdwHeaderGroupChild *self;
- gpointer header_group;
-
- g_return_val_if_fail (GTK_IS_HEADER_BAR (header_bar), NULL);
-
- header_group = g_object_get_data (G_OBJECT (header_bar), "header-group");
-
- g_return_val_if_fail (header_group == NULL, NULL);
-
- self = g_object_new (ADW_TYPE_HEADER_GROUP_CHILD, NULL);
- self->type = ADW_HEADER_GROUP_CHILD_TYPE_GTK_HEADER_BAR;
- self->object = G_OBJECT (header_bar);
-
- g_signal_connect_swapped (header_bar, "destroy", G_CALLBACK (object_destroyed_cb), self);
-
- g_signal_connect_swapped (header_bar, "map", G_CALLBACK (forward_update_decoration_layouts), self);
- g_signal_connect_swapped (header_bar, "unmap", G_CALLBACK (forward_update_decoration_layouts), self);
-
- return self;
-}
-
-static AdwHeaderGroupChild *
-adw_header_group_child_new_for_header_group (AdwHeaderGroup *header_group)
-{
- AdwHeaderGroupChild *self;
- gpointer parent_header_group;
-
- g_return_val_if_fail (ADW_IS_HEADER_GROUP (header_group), NULL);
-
- parent_header_group = g_object_get_data (G_OBJECT (header_group), "header-group");
-
- g_return_val_if_fail (parent_header_group == NULL, NULL);
-
- self = g_object_new (ADW_TYPE_HEADER_GROUP_CHILD, NULL);
- self->type = ADW_HEADER_GROUP_CHILD_TYPE_HEADER_GROUP;
- self->object = G_OBJECT (header_group);
-
- g_object_weak_ref (G_OBJECT (header_group), (GWeakNotify) object_destroyed_cb, self);
-
- g_signal_connect_swapped (header_group, "update-decoration-layouts", G_CALLBACK (forward_update_decoration_layouts), self);
-
- return self;
-}
-
-static void
-adw_header_group_child_class_init (AdwHeaderGroupChildClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = adw_header_group_child_dispose;
-}
-
-static void
-adw_header_group_child_init (AdwHeaderGroupChild *self)
-{
-}
-
-static void
-adw_header_group_child_set_decoration_layout (AdwHeaderGroupChild *self,
- const gchar *layout)
-{
- g_assert (ADW_IS_HEADER_GROUP_CHILD (self));
-
- switch (self->type) {
- case ADW_HEADER_GROUP_CHILD_TYPE_HEADER_BAR:
- adw_header_bar_set_decoration_layout (ADW_HEADER_BAR (self->object), layout);
- break;
- case ADW_HEADER_GROUP_CHILD_TYPE_GTK_HEADER_BAR:
- gtk_header_bar_set_decoration_layout (GTK_HEADER_BAR (self->object), layout);
- break;
- case ADW_HEADER_GROUP_CHILD_TYPE_HEADER_GROUP:
- {
- AdwHeaderGroup *group = ADW_HEADER_GROUP (self->object);
-
- g_free (group->layout);
- group->layout = g_strdup (layout);
-
- update_decoration_layouts (group);
- }
- break;
- default:
- g_assert_not_reached ();
- }
-}
-
-static gboolean
-adw_header_group_child_get_mapped (AdwHeaderGroupChild *self)
-{
- g_assert (ADW_IS_HEADER_GROUP_CHILD (self));
-
- switch (self->type) {
- case ADW_HEADER_GROUP_CHILD_TYPE_HEADER_BAR:
- case ADW_HEADER_GROUP_CHILD_TYPE_GTK_HEADER_BAR:
- return gtk_widget_get_mapped (GTK_WIDGET (self->object));
- case ADW_HEADER_GROUP_CHILD_TYPE_HEADER_GROUP:
- for (GSList *children = ADW_HEADER_GROUP (self->object)->children;
- children != NULL;
- children = children->next)
- if (adw_header_group_child_get_mapped (ADW_HEADER_GROUP_CHILD (children->data)))
- return TRUE;
-
- return FALSE;
- default:
- g_assert_not_reached ();
- }
-}
-
-static AdwHeaderGroupChild *
-get_child_for_object (AdwHeaderGroup *self,
- gpointer object)
-{
- GSList *children;
-
- for (children = self->children; children != NULL; children = children->next) {
- AdwHeaderGroupChild *child = ADW_HEADER_GROUP_CHILD (children->data);
-
- g_assert (child);
-
- if (child->object == object)
- return child;
- }
-
- return NULL;
-}
-
-static void
-update_decoration_layouts (AdwHeaderGroup *self)
-{
- GSList *children;
- GtkSettings *settings;
- AdwHeaderGroupChild *start_child = NULL, *end_child = NULL;
- g_autofree gchar *layout = NULL;
- g_autofree gchar *start_layout = NULL;
- g_autofree gchar *end_layout = NULL;
- g_auto(GStrv) ends = NULL;
-
- g_return_if_fail (ADW_IS_HEADER_GROUP (self));
-
- children = self->children;
-
- if (children == NULL)
- return;
-
- settings = gtk_settings_get_default ();
- if (self->layout)
- layout = g_strdup (self->layout);
- else
- g_object_get (G_OBJECT (settings), "gtk-decoration-layout", &layout, NULL);
- if (layout == NULL)
- layout = g_strdup (":");
-
- if (self->decorate_all) {
- for (; children != NULL; children = children->next)
- adw_header_group_child_set_decoration_layout (ADW_HEADER_GROUP_CHILD (children->data), layout);
-
- return;
- }
-
- for (; children != NULL; children = children->next) {
- AdwHeaderGroupChild *child = ADW_HEADER_GROUP_CHILD (children->data);
-
- adw_header_group_child_set_decoration_layout (child, ":");
-
- if (!adw_header_group_child_get_mapped (child))
- continue;
-
- /* The headerbars are in reverse order in the list. */
- start_child = child;
- if (end_child == NULL)
- end_child = child;
- }
-
- if (start_child == NULL || end_child == NULL)
- return;
-
- if (start_child == end_child) {
- adw_header_group_child_set_decoration_layout (start_child, layout);
-
- return;
- }
-
- ends = g_strsplit (layout, ":", 2);
- if (g_strv_length (ends) >= 2) {
- start_layout = g_strdup_printf ("%s:", ends[0]);
- end_layout = g_strdup_printf (":%s", ends[1]);
- } else {
- start_layout = g_strdup (":");
- end_layout = g_strdup (":");
- }
- adw_header_group_child_set_decoration_layout (start_child, start_layout);
- adw_header_group_child_set_decoration_layout (end_child, end_layout);
-}
-
-static void
-child_destroyed_cb (AdwHeaderGroup *self,
- AdwHeaderGroupChild *child)
-{
- g_assert (ADW_IS_HEADER_GROUP (self));
- g_assert (ADW_IS_HEADER_GROUP_CHILD (child));
- g_assert (g_slist_find (self->children, child) != NULL);
-
- self->children = g_slist_remove (self->children, child);
-
- g_object_unref (self);
-}
-
-AdwHeaderGroup *
-adw_header_group_new (void)
-{
- return g_object_new (ADW_TYPE_HEADER_GROUP, NULL);
-}
-
-static void
-adw_header_group_add_child (AdwHeaderGroup *self,
- AdwHeaderGroupChild *child)
-{
- g_assert (ADW_IS_HEADER_GROUP (self));
- g_assert (ADW_IS_HEADER_GROUP_CHILD (child));
- g_assert (g_slist_find (self->children, child) == NULL);
-
- self->children = g_slist_prepend (self->children, child);
- g_object_weak_ref (G_OBJECT (child), (GWeakNotify) child_destroyed_cb, self);
- g_object_ref (self);
-
- update_decoration_layouts (self);
-
- g_object_set_data (G_OBJECT (child), "header-group", self);
-}
-
-/**
- * adw_header_group_add_header_bar:
- * @self: a #AdwHeaderGroup
- * @header_bar: the #AdwHeaderBar to add
- *
- * Adds @header_bar to @self.
- * When the widget is destroyed or no longer referenced elsewhere, it will
- * be removed from the header group.
- *
- * Since: 1.0
- */
-void
-adw_header_group_add_header_bar (AdwHeaderGroup *self,
- AdwHeaderBar *header_bar)
-{
- AdwHeaderGroupChild *child;
-
- g_return_if_fail (ADW_IS_HEADER_GROUP (self));
- g_return_if_fail (ADW_IS_HEADER_BAR (header_bar));
- g_return_if_fail (get_child_for_object (self, header_bar) == NULL);
-
- child = adw_header_group_child_new_for_header_bar (header_bar);
- adw_header_group_add_child (self, child);
-}
-
-/**
- * adw_header_group_add_gtk_header_bar:
- * @self: a #AdwHeaderGroup
- * @header_bar: the #GtkHeaderBar to add
- *
- * Adds @header_bar to @self.
- * When the widget is destroyed or no longer referenced elsewhere, it will
- * be removed from the header group.
- *
- * Since: 1.0
- */
-void
-adw_header_group_add_gtk_header_bar (AdwHeaderGroup *self,
- GtkHeaderBar *header_bar)
-{
- AdwHeaderGroupChild *child;
-
- g_return_if_fail (ADW_IS_HEADER_GROUP (self));
- g_return_if_fail (GTK_IS_HEADER_BAR (header_bar));
- g_return_if_fail (get_child_for_object (self, header_bar) == NULL);
-
- child = adw_header_group_child_new_for_gtk_header_bar (header_bar);
- adw_header_group_add_child (self, child);
-}
-
-/**
- * adw_header_group_add_header_group:
- * @self: a #AdwHeaderGroup
- * @header_group: the #AdwHeaderGroup to add
- *
- * Adds @header_group to @self.
- * When the nested group is no longer referenced elsewhere, it will be removed
- * from the header group.
- *
- * Since: 1.0
- */
-void
-adw_header_group_add_header_group (AdwHeaderGroup *self,
- AdwHeaderGroup *header_group)
-{
- AdwHeaderGroupChild *child;
-
- g_return_if_fail (ADW_IS_HEADER_GROUP (self));
- g_return_if_fail (ADW_IS_HEADER_GROUP (header_group));
- g_return_if_fail (get_child_for_object (self, header_group) == NULL);
-
- child = adw_header_group_child_new_for_header_group (header_group);
- adw_header_group_add_child (self, child);
-}
-
-typedef struct {
- gchar *name;
- gint line;
- gint col;
-} ItemData;
-
-static void
-item_data_free (gpointer data)
-{
- ItemData *item_data = data;
-
- g_free (item_data->name);
- g_free (item_data);
-}
-
-typedef struct {
- GObject *object;
- GtkBuilder *builder;
- GSList *items;
-} GSListSubParserData;
-
-static void
-adw_header_group_dispose (GObject *object)
-{
- AdwHeaderGroup *self = (AdwHeaderGroup *)object;
-
- g_slist_free_full (self->children, (GDestroyNotify) g_object_unref);
- self->children = NULL;
-
- G_OBJECT_CLASS (adw_header_group_parent_class)->dispose (object);
-}
-
-static void
-adw_header_group_finalize (GObject *object)
-{
- AdwHeaderGroup *self = (AdwHeaderGroup *) object;
-
- g_free (self->layout);
-
- G_OBJECT_CLASS (adw_header_group_parent_class)->finalize (object);
-}
-
-static void
-adw_header_group_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- AdwHeaderGroup *self = ADW_HEADER_GROUP (object);
-
- switch (prop_id) {
- case PROP_DECORATE_ALL:
- g_value_set_boolean (value, adw_header_group_get_decorate_all (self));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- }
-}
-
-static void
-adw_header_group_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- AdwHeaderGroup *self = ADW_HEADER_GROUP (object);
-
- switch (prop_id) {
- case PROP_DECORATE_ALL:
- adw_header_group_set_decorate_all (self, g_value_get_boolean (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- }
-}
-
-/*< private >
- * @builder: a #GtkBuilder
- * @context: the #GtkBuildableParseContext
- * @parent_name: the name of the expected parent element
- * @error: return location for an error
- *
- * Checks that the parent element of the currently handled
- * start tag is @parent_name and set @error if it isn't.
- *
- * This is intended to be called in start_element vfuncs to
- * ensure that element nesting is as intended.
- *
- * Returns: %TRUE if @parent_name is the parent element
- */
-/* This has been copied and modified from gtkbuilder.c. */
-static gboolean
-_gtk_builder_check_parent (GtkBuilder *builder,
- GtkBuildableParseContext *context,
- const gchar *parent_name,
- GError **error)
-{
- GPtrArray *stack;
- int line, col;
- const char *parent;
- const char *element;
-
- stack = gtk_buildable_parse_context_get_element_stack (context);
-
- element = g_ptr_array_index (stack, stack->len - 1);
- parent = stack->len > 1 ? g_ptr_array_index (stack, stack->len - 2) : "";
-
- if (g_str_equal (parent_name, parent) ||
- (g_str_equal (parent_name, "object") && g_str_equal (parent, "template")))
- return TRUE;
-
- gtk_buildable_parse_context_get_position (context, &line, &col);
- g_set_error (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_TAG,
- ".:%d:%d Can't use <%s> here",
- line, col, element);
-
- return FALSE;
-}
-
-/*< private >
- * _gtk_builder_prefix_error:
- * @builder: a #GtkBuilder
- * @context: the #GtkBuildableParseContext
- * @error: an error
- *
- * Calls g_prefix_error() to prepend a filename:line:column marker
- * to the given error. The filename is taken from @builder, and
- * the line and column are obtained by calling
- * g_markup_parse_context_get_position().
- *
- * This is intended to be called on errors returned by
- * g_markup_collect_attributes() in a start_element vfunc.
- */
-/* This has been copied and modified from gtkbuilder.c. */
-static void
-_gtk_builder_prefix_error (GtkBuilder *builder,
- GtkBuildableParseContext *context,
- GError **error)
-{
- gint line, col;
-
- gtk_buildable_parse_context_get_position (context, &line, &col);
- g_prefix_error (error, ".:%d:%d ", line, col);
-}
-
-/*< private >
- * _gtk_builder_error_unhandled_tag:
- * @builder: a #GtkBuilder
- * @context: the #GtkBuildableParseContext
- * @object: name of the object that is being handled
- * @element_name: name of the element whose start tag is being handled
- * @error: return location for the error
- *
- * Sets @error to a suitable error indicating that an @element_name
- * tag is not expected in the custom markup for @object.
- *
- * This is intended to be called in a start_element vfunc.
- */
-/* This has been copied and modified from gtkbuilder.c. */
-static void
-_gtk_builder_error_unhandled_tag (GtkBuilder *builder,
- GtkBuildableParseContext *context,
- const gchar *object,
- const gchar *element_name,
- GError **error)
-{
- gint line, col;
-
- gtk_buildable_parse_context_get_position (context, &line, &col);
- g_set_error (error,
- GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_UNHANDLED_TAG,
- ".:%d:%d Unsupported tag for %s: <%s>",
- line, col,
- object, element_name);
-}
-
-/* This has been copied and modified from gtksizegroup.c. */
-static void
-header_group_start_element (GtkBuildableParseContext *context,
- const gchar *element_name,
- const gchar **names,
- const gchar **values,
- gpointer user_data,
- GError **error)
-{
- GSListSubParserData *data = (GSListSubParserData*)user_data;
-
- if (strcmp (element_name, "headerbar") == 0)
- {
- const gchar *name;
- ItemData *item_data;
-
- if (!_gtk_builder_check_parent (data->builder, context, "headerbars", error))
- return;
-
- if (!g_markup_collect_attributes (element_name, names, values, error,
- G_MARKUP_COLLECT_STRING, "name", &name,
- G_MARKUP_COLLECT_INVALID))
- {
- _gtk_builder_prefix_error (data->builder, context, error);
- return;
- }
-
- item_data = g_new (ItemData, 1);
- item_data->name = g_strdup (name);
- gtk_buildable_parse_context_get_position (context, &item_data->line, &item_data->col);
- data->items = g_slist_prepend (data->items, item_data);
- }
- else if (strcmp (element_name, "headerbars") == 0)
- {
- if (!_gtk_builder_check_parent (data->builder, context, "object", error))
- return;
-
- if (!g_markup_collect_attributes (element_name, names, values, error,
- G_MARKUP_COLLECT_INVALID, NULL, NULL,
- G_MARKUP_COLLECT_INVALID))
- _gtk_builder_prefix_error (data->builder, context, error);
- }
- else
- {
- _gtk_builder_error_unhandled_tag (data->builder, context,
- "AdwHeaderGroup", element_name,
- error);
- }
-}
-
-
-/* This has been copied and modified from gtksizegroup.c. */
-static const GtkBuildableParser header_group_parser =
- {
- header_group_start_element
- };
-
-/* This has been copied and modified from gtksizegroup.c. */
-static gboolean
-adw_header_group_buildable_custom_tag_start (GtkBuildable *buildable,
- GtkBuilder *builder,
- GObject *child,
- const gchar *tagname,
- GtkBuildableParser *parser,
- gpointer *parser_data)
-{
- GSListSubParserData *data;
-
- if (child)
- return FALSE;
-
- if (strcmp (tagname, "headerbars") == 0)
- {
- data = g_slice_new0 (GSListSubParserData);
- data->items = NULL;
- data->object = G_OBJECT (buildable);
- data->builder = builder;
-
- *parser = header_group_parser;
- *parser_data = data;
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-/* This has been copied and modified from gtksizegroup.c. */
-static void
-adw_header_group_buildable_custom_finished (GtkBuildable *buildable,
- GtkBuilder *builder,
- GObject *child,
- const gchar *tagname,
- gpointer user_data)
-{
- GSList *l;
- GSListSubParserData *data;
-
- if (strcmp (tagname, "headerbars") != 0)
- return;
-
- data = (GSListSubParserData*)user_data;
- data->items = g_slist_reverse (data->items);
-
- for (l = data->items; l; l = l->next) {
- ItemData *item_data = l->data;
- GObject *object = gtk_builder_get_object (builder, item_data->name);
-
- if (!object)
- continue;
-
- if (GTK_IS_HEADER_BAR (object))
- adw_header_group_add_gtk_header_bar (ADW_HEADER_GROUP (data->object),
- GTK_HEADER_BAR (object));
- else if (ADW_IS_HEADER_BAR (object))
- adw_header_group_add_header_bar (ADW_HEADER_GROUP (data->object),
- ADW_HEADER_BAR (object));
- else if (ADW_IS_HEADER_GROUP (object))
- adw_header_group_add_header_group (ADW_HEADER_GROUP (data->object),
- ADW_HEADER_GROUP (object));
- }
-
- g_slist_free_full (data->items, item_data_free);
- g_slice_free (GSListSubParserData, data);
-}
-
-static void
-adw_header_group_class_init (AdwHeaderGroupClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = adw_header_group_dispose;
- object_class->finalize = adw_header_group_finalize;
- object_class->get_property = adw_header_group_get_property;
- object_class->set_property = adw_header_group_set_property;
-
- /**
- * AdwHeaderGroup:decorate-all:
- *
- * Whether the elements of the group should all receive the full decoration.
- * This is useful in conjunction with #AdwLeaflet:folded when the leaflet
- * contains the header bars of the group, as you want them all to display the
- * complete decoration when the leaflet is folded.
- *
- * Since: 1.0
- */
- props[PROP_DECORATE_ALL] =
- g_param_spec_boolean ("decorate-all",
- _("Decorate all"),
- _("Whether the elements of the group should all receive the full decoration"),
- FALSE,
- G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
-
- g_object_class_install_properties (object_class, N_PROPS, props);
-
- /**
- * AdwHeaderGroup::update-decoration-layouts:
- * @self: The #AdwHeaderGroup instance
- *
- * This signal is emitted before updating the decoration layouts.
- *
- * Since: 1.0
- */
- signals[SIGNAL_UPDATE_DECORATION_LAYOUTS] =
- g_signal_new ("update-decoration-layouts",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL, NULL,
- G_TYPE_NONE,
- 0);
-}
-
-static void
-adw_header_group_init (AdwHeaderGroup *self)
-{
- GtkSettings *settings = gtk_settings_get_default ();
-
- g_signal_connect_swapped (settings, "notify::gtk-decoration-layout", G_CALLBACK (update_decoration_layouts), self);
-}
-
-static void
-adw_header_group_buildable_init (GtkBuildableIface *iface)
-{
- iface->custom_tag_start = adw_header_group_buildable_custom_tag_start;
- iface->custom_finished = adw_header_group_buildable_custom_finished;
-}
-
-/**
- * adw_header_group_child_get_header_bar:
- * @self: a #AdwHeaderGroupChild
- *
- * Gets the child #AdwHeaderBar.
- * Use adw_header_group_child_get_child_type() to check the child type.
- *
- * Returns: (transfer none): the child #AdwHeaderBar, or %NULL in case of error.
- *
- * Since: 1.0
- */
-AdwHeaderBar *
-adw_header_group_child_get_header_bar (AdwHeaderGroupChild *self)
-{
- g_return_val_if_fail (ADW_IS_HEADER_GROUP_CHILD (self), NULL);
- g_return_val_if_fail (self->type == ADW_HEADER_GROUP_CHILD_TYPE_HEADER_BAR, NULL);
-
- return ADW_HEADER_BAR (self->object);
-}
-
-/**
- * adw_header_group_child_get_gtk_header_bar:
- * @self: a #AdwHeaderGroupChild
- *
- * Gets the child #GtkHeaderBar.
- * Use adw_header_group_child_get_child_type() to check the child type.
- *
- * Returns: (transfer none): the child #GtkHeaderBar, or %NULL in case of error.
- *
- * Since: 1.0
- */
-GtkHeaderBar *
-adw_header_group_child_get_gtk_header_bar (AdwHeaderGroupChild *self)
-{
- g_return_val_if_fail (ADW_IS_HEADER_GROUP_CHILD (self), NULL);
- g_return_val_if_fail (self->type == ADW_HEADER_GROUP_CHILD_TYPE_GTK_HEADER_BAR, NULL);
-
- return GTK_HEADER_BAR (self->object);
-}
-
-/**
- * adw_header_group_child_get_header_group:
- * @self: a #AdwHeaderGroupChild
- *
- * Gets the child #AdwHeaderGroup.
- * Use adw_header_group_child_get_child_type() to check the child type.
- *
- * Returns: (transfer none): the child #AdwHeaderGroup, or %NULL in case of error.
- *
- * Since: 1.0
- */
-AdwHeaderGroup *
-adw_header_group_child_get_header_group (AdwHeaderGroupChild *self)
-{
- g_return_val_if_fail (ADW_IS_HEADER_GROUP_CHILD (self), NULL);
- g_return_val_if_fail (self->type == ADW_HEADER_GROUP_CHILD_TYPE_HEADER_GROUP, NULL);
-
- return ADW_HEADER_GROUP (self->object);
-}
-
-/**
- * adw_header_group_child_get_child_type:
- * @self: a #AdwHeaderGroupChild
- *
- * Gets the child type.
- *
- * Returns: the child type.
- *
- * Since: 1.0
- */
-AdwHeaderGroupChildType
-adw_header_group_child_get_child_type (AdwHeaderGroupChild *self)
-{
- g_return_val_if_fail (ADW_IS_HEADER_GROUP_CHILD (self), ADW_HEADER_GROUP_CHILD_TYPE_HEADER_BAR);
-
- return self->type;
-}
-
-/**
- * adw_header_group_get_children:
- * @self: a #AdwHeaderGroup
- *
- * Returns the list of children associated with @self.
- *
- * Returns: (element-type AdwHeaderGroupChild) (transfer none): the #GSList of
- * children. The list is owned by libadwaita and should not be modified.
- *
- * Since: 1.0
- */
-GSList *
-adw_header_group_get_children (AdwHeaderGroup *self)
-{
- g_return_val_if_fail (ADW_IS_HEADER_GROUP (self), NULL);
-
- return self->children;
-}
-
-static void
-remove_child (AdwHeaderGroup *self,
- AdwHeaderGroupChild *child)
-{
- self->children = g_slist_remove (self->children, child);
-
- g_object_weak_unref (G_OBJECT (child), (GWeakNotify) child_destroyed_cb, self);
-
- g_object_unref (self);
- g_object_unref (child);
-}
-
-/**
- * adw_header_group_remove_header_bar:
- * @self: a #AdwHeaderGroup
- * @header_bar: the #AdwHeaderBar to remove
- *
- * Removes @header_bar from @self.
- *
- * Since: 1.0
- */
-void
-adw_header_group_remove_header_bar (AdwHeaderGroup *self,
- AdwHeaderBar *header_bar)
-{
- AdwHeaderGroupChild *child;
-
- g_return_if_fail (ADW_IS_HEADER_GROUP (self));
- g_return_if_fail (ADW_IS_HEADER_BAR (header_bar));
-
- child = get_child_for_object (self, header_bar);
-
- g_return_if_fail (child != NULL);
-
- remove_child (self, child);
-}
-
-/**
- * adw_header_group_remove_gtk_header_bar:
- * @self: a #AdwHeaderGroup
- * @header_bar: the #GtkHeaderBar to remove
- *
- * Removes @header_bar from @self.
- *
- * Since: 1.0
- */
-void
-adw_header_group_remove_gtk_header_bar (AdwHeaderGroup *self,
- GtkHeaderBar *header_bar)
-{
- AdwHeaderGroupChild *child;
-
- g_return_if_fail (ADW_IS_HEADER_GROUP (self));
- g_return_if_fail (GTK_IS_HEADER_BAR (header_bar));
-
- child = get_child_for_object (self, header_bar);
-
- g_return_if_fail (child != NULL);
-
- remove_child (self, child);
-}
-
-/**
- * adw_header_group_remove_header_group:
- * @self: a #AdwHeaderGroup
- * @header_group: the #AdwHeaderGroup to remove
- *
- * Removes a nested #AdwHeaderGroup from a #AdwHeaderGroup
- *
- * Since: 1.0
- */
-void
-adw_header_group_remove_header_group (AdwHeaderGroup *self,
- AdwHeaderGroup *header_group)
-{
- AdwHeaderGroupChild *child;
-
- g_return_if_fail (ADW_IS_HEADER_GROUP (self));
- g_return_if_fail (ADW_IS_HEADER_GROUP (header_group));
-
- child = get_child_for_object (self, header_group);
-
- g_return_if_fail (child != NULL);
-
- remove_child (self, child);
-}
-
-/**
- * adw_header_group_remove_child:
- * @self: a #AdwHeaderGroup
- * @child: the #AdwHeaderGroupChild to remove
- *
- * Removes @child from @self.
- *
- * Since: 1.0
- */
-void
-adw_header_group_remove_child (AdwHeaderGroup *self,
- AdwHeaderGroupChild *child)
-{
- g_return_if_fail (ADW_IS_HEADER_GROUP (self));
- g_return_if_fail (ADW_IS_HEADER_GROUP_CHILD (child));
- g_return_if_fail (g_slist_find (self->children, child) != NULL);
-
- remove_child (self, child);
-}
-
-/**
- * adw_header_group_set_decorate_all:
- * @self: a #AdwHeaderGroup
- * @decorate_all: whether the elements of the group should all receive the full decoration
- *
- * Sets whether the elements of the group should all receive the full decoration.
- *
- * Since: 1.0
- */
-void
-adw_header_group_set_decorate_all (AdwHeaderGroup *self,
- gboolean decorate_all)
-{
- g_return_if_fail (ADW_IS_HEADER_GROUP (self));
-
- decorate_all = !!decorate_all;
-
- if (self->decorate_all == decorate_all)
- return;
-
- self->decorate_all = decorate_all;
-
- update_decoration_layouts (self);
-
- g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DECORATE_ALL]);
-}
-
-/**
- * adw_header_group_get_decorate_all:
- * @self: a #AdwHeaderGroup
- *
- * Gets whether the elements of the group should all receive the full decoration.
- *
- * Returns: %TRUE if the elements of the group should all receive the full
- * decoration, %FALSE otherwise.
- *
- * Since: 1.0
- */
-gboolean
-adw_header_group_get_decorate_all (AdwHeaderGroup *self)
-{
- g_return_val_if_fail (ADW_IS_HEADER_GROUP (self), FALSE);
-
- return self->decorate_all;
-}
diff --git a/src/adw-header-group.h b/src/adw-header-group.h
deleted file mode 100644
index 5ad66cca946dd182e95826d1ea303b5d64a7742f..0000000000000000000000000000000000000000
--- a/src/adw-header-group.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2018 Purism SPC
- *
- * SPDX-License-Identifier: LGPL-2.1+
- */
-
-#pragma once
-
-#if !defined(_ADWAITA_INSIDE) && !defined(ADWAITA_COMPILATION)
-#error "Only can be included directly."
-#endif
-
-#include "adw-version.h"
-
-#include
-#include "adw-header-bar.h"
-
-G_BEGIN_DECLS
-
-#define ADW_TYPE_HEADER_GROUP_CHILD (adw_header_group_child_get_type())
-
-ADW_AVAILABLE_IN_ALL
-G_DECLARE_FINAL_TYPE (AdwHeaderGroupChild, adw_header_group_child, ADW, HEADER_GROUP_CHILD, GObject)
-
-#define ADW_TYPE_HEADER_GROUP (adw_header_group_get_type())
-
-ADW_AVAILABLE_IN_ALL
-G_DECLARE_FINAL_TYPE (AdwHeaderGroup, adw_header_group, ADW, HEADER_GROUP, GObject)
-
-typedef enum {
- ADW_HEADER_GROUP_CHILD_TYPE_HEADER_BAR,
- ADW_HEADER_GROUP_CHILD_TYPE_GTK_HEADER_BAR,
- ADW_HEADER_GROUP_CHILD_TYPE_HEADER_GROUP,
-} AdwHeaderGroupChildType;
-
-ADW_AVAILABLE_IN_ALL
-AdwHeaderBar *adw_header_group_child_get_header_bar (AdwHeaderGroupChild *self);
-ADW_AVAILABLE_IN_ALL
-GtkHeaderBar *adw_header_group_child_get_gtk_header_bar (AdwHeaderGroupChild *self);
-ADW_AVAILABLE_IN_ALL
-AdwHeaderGroup *adw_header_group_child_get_header_group (AdwHeaderGroupChild *self);
-
-ADW_AVAILABLE_IN_ALL
-AdwHeaderGroupChildType adw_header_group_child_get_child_type (AdwHeaderGroupChild *self);
-
-ADW_AVAILABLE_IN_ALL
-AdwHeaderGroup *adw_header_group_new (void);
-
-ADW_AVAILABLE_IN_ALL
-void adw_header_group_add_header_bar (AdwHeaderGroup *self,
- AdwHeaderBar *header_bar);
-ADW_AVAILABLE_IN_ALL
-void adw_header_group_add_gtk_header_bar (AdwHeaderGroup *self,
- GtkHeaderBar *header_bar);
-ADW_AVAILABLE_IN_ALL
-void adw_header_group_add_header_group (AdwHeaderGroup *self,
- AdwHeaderGroup *header_group);
-
-ADW_AVAILABLE_IN_ALL
-GSList *adw_header_group_get_children (AdwHeaderGroup *self);
-
-ADW_AVAILABLE_IN_ALL
-void adw_header_group_remove_header_bar (AdwHeaderGroup *self,
- AdwHeaderBar *header_bar);
-ADW_AVAILABLE_IN_ALL
-void adw_header_group_remove_gtk_header_bar (AdwHeaderGroup *self,
- GtkHeaderBar *header_bar);
-ADW_AVAILABLE_IN_ALL
-void adw_header_group_remove_header_group (AdwHeaderGroup *self,
- AdwHeaderGroup *header_group);
-ADW_AVAILABLE_IN_ALL
-void adw_header_group_remove_child (AdwHeaderGroup *self,
- AdwHeaderGroupChild *child);
-
-ADW_AVAILABLE_IN_ALL
-gboolean adw_header_group_get_decorate_all (AdwHeaderGroup *self);
-ADW_AVAILABLE_IN_ALL
-void adw_header_group_set_decorate_all (AdwHeaderGroup *self,
- gboolean decorate_all);
-
-G_END_DECLS
diff --git a/src/adwaita.h b/src/adwaita.h
index 0206ca05663432e589576584ced3130e07996979..abc75c1465553d991bec44cd8c4216c16ea58474 100644
--- a/src/adwaita.h
+++ b/src/adwaita.h
@@ -39,7 +39,6 @@ G_BEGIN_DECLS
#include "adw-expander-row.h"
#include "adw-flap.h"
#include "adw-header-bar.h"
-#include "adw-header-group.h"
#include "adw-keypad.h"
#include "adw-leaflet.h"
#include "adw-main.h"
diff --git a/src/meson.build b/src/meson.build
index d96ec841fab970ffc3ba4cfdf9a1fa6130d6f0a0..527e6ea1e60d1d76e27ea7ba9296461fcd9cddb5 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -10,7 +10,6 @@ libadwaita_resources = gnome.compile_resources(
adw_public_enum_headers = [
'adw-flap.h',
'adw-header-bar.h',
- 'adw-header-group.h',
'adw-leaflet.h',
'adw-navigation-direction.h',
'adw-squeezer.h',
@@ -81,7 +80,6 @@ src_headers = [
'adw-expander-row.h',
'adw-flap.h',
'adw-header-bar.h',
- 'adw-header-group.h',
'adw-keypad.h',
'adw-leaflet.h',
'adw-main.h',
@@ -135,7 +133,6 @@ src_sources = [
'adw-focus.c',
'adw-gizmo.c',
'adw-header-bar.c',
- 'adw-header-group.c',
'adw-keypad-button.c',
'adw-keypad.c',
'adw-leaflet.c',
diff --git a/tests/meson.build b/tests/meson.build
index 2318ed48dd4eb5202897532d6e441ef68798ddc3..ea28b9cb25cf3770eed971eb4aeadc57a262f15b 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -31,7 +31,6 @@ test_names = [
'test-expander-row',
'test-flap',
'test-header-bar',
- 'test-header-group',
'test-keypad',
'test-leaflet',
'test-preferences-group',
diff --git a/tests/test-header-group.c b/tests/test-header-group.c
deleted file mode 100644
index 40bceee60b62376c55ef1afa21628069090b4dbf..0000000000000000000000000000000000000000
--- a/tests/test-header-group.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2017 Purism SPC
- *
- * SPDX-License-Identifier: LGPL-2.1+
- */
-
-#include
-
-
-static void
-test_adw_header_group_decorate_all (void)
-{
- g_autoptr (AdwHeaderGroup) hg = ADW_HEADER_GROUP (adw_header_group_new ());
- gboolean decorate_all = FALSE;
-
- g_assert_false (adw_header_group_get_decorate_all (hg));
- g_object_get (hg, "decorate-all", &decorate_all, NULL);
- g_assert_false (decorate_all);
-
- adw_header_group_set_decorate_all (hg, TRUE);
-
- g_assert_true (adw_header_group_get_decorate_all (hg));
- g_object_get (hg, "decorate-all", &decorate_all, NULL);
- g_assert_true (decorate_all);
-
- g_object_set (hg, "decorate-all", FALSE, NULL);
-
- g_assert_false (adw_header_group_get_decorate_all (hg));
- g_object_get (hg, "decorate-all", &decorate_all, NULL);
- g_assert_false (decorate_all);
-}
-
-
-static void
-test_adw_header_group_add_remove (void)
-{
- g_autoptr (AdwHeaderGroup) hg = ADW_HEADER_GROUP (adw_header_group_new ());
- g_autoptr (AdwHeaderBar) bar1 = ADW_HEADER_BAR (g_object_ref_sink (adw_header_bar_new ()));
- g_autoptr (GtkHeaderBar) bar2 = GTK_HEADER_BAR (g_object_ref_sink (gtk_header_bar_new ()));
-
- g_assert_cmpint (g_slist_length (adw_header_group_get_children (hg)), ==, 0);
-
- adw_header_group_add_header_bar (hg, bar1);
- g_assert_cmpint (g_slist_length (adw_header_group_get_children (hg)), ==, 1);
-
- adw_header_group_add_gtk_header_bar (hg, bar2);
- g_assert_cmpint (g_slist_length (adw_header_group_get_children (hg)), ==, 2);
-
- adw_header_group_remove_gtk_header_bar (hg, bar2);
- g_assert_cmpint (g_slist_length (adw_header_group_get_children (hg)), ==, 1);
-
- adw_header_group_remove_header_bar (hg, bar1);
-
- g_assert_cmpint (g_slist_length (adw_header_group_get_children (hg)), ==, 0);
-}
-
-
-gint
-main (gint argc,
- gchar *argv[])
-{
- gtk_test_init (&argc, &argv, NULL);
- adw_init ();
-
- g_test_add_func("/Adwaita/HeaderGroup/decorate_all", test_adw_header_group_decorate_all);
- g_test_add_func("/Adwaita/HeaderGroup/add_remove", test_adw_header_group_add_remove);
- return g_test_run();
-}