[libhandy] header-group: Introduce HdyHeaderGroupChild as the child type
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libhandy] header-group: Introduce HdyHeaderGroupChild as the child type
- Date: Fri, 10 Jul 2020 18:43:21 +0000 (UTC)
commit a127175274844e1a773cb22c580f9d134b9be4b3
Author: Adrien Plazas <kekun plazas laposte net>
Date: Mon Jun 29 09:28:01 2020 +0200
header-group: Introduce HdyHeaderGroupChild as the child type
This will help introducing new child types.
debian/libhandy-1-0.symbols | 5 +
glade/glade-hdy-header-group.c | 4 +-
src/hdy-enums.c.in | 1 +
src/hdy-header-group.c | 420 +++++++++++++++++++++++++++++++----------
src/hdy-header-group.h | 14 ++
src/meson.build | 1 +
tests/test-header-group.c | 21 +--
7 files changed, 355 insertions(+), 111 deletions(-)
---
diff --git a/debian/libhandy-1-0.symbols b/debian/libhandy-1-0.symbols
index 3ee4d2c3..55e76aae 100644
--- a/debian/libhandy-1-0.symbols
+++ b/debian/libhandy-1-0.symbols
@@ -165,10 +165,15 @@ libhandy-1.so.0 libhandy-1-0 #MINVER#
hdy_header_bar_set_title@LIBHANDY_1_0 0.0.10
hdy_header_bar_set_transition_duration@LIBHANDY_1_0 0.0.10
hdy_header_group_add_gtk_header_bar@LIBHANDY_1_0 0.83.0
+ hdy_header_group_child_get_child_type@LIBHANDY_1_0 0.83.0
+ hdy_header_group_child_get_gtk_header_bar@LIBHANDY_1_0 0.83.0
+ hdy_header_group_child_get_type@LIBHANDY_1_0 0.83.0
+ hdy_header_group_child_type_get_type@LIBHANDY_1_0 0.83.0
hdy_header_group_get_children@LIBHANDY_1_0 0.83.0
hdy_header_group_get_decorate_all@LIBHANDY_1_0 0.83.0
hdy_header_group_get_type@LIBHANDY_1_0 0.0.3
hdy_header_group_new@LIBHANDY_1_0 0.0.3
+ hdy_header_group_remove_child@LIBHANDY_1_0 0.83.0
hdy_header_group_remove_gtk_header_bar@LIBHANDY_1_0 0.83.0
hdy_header_group_set_decorate_all@LIBHANDY_1_0 0.83.0
hdy_init@LIBHANDY_1_0 0.82.0
diff --git a/glade/glade-hdy-header-group.c b/glade/glade-hdy-header-group.c
index b4408ea6..9f7dce8e 100644
--- a/glade/glade-hdy-header-group.c
+++ b/glade/glade-hdy-header-group.c
@@ -144,8 +144,8 @@ glade_hdy_header_group_set_property (GladeWidgetAdaptor *adaptor,
/* copy since we are modifying an internal list */
sg_widgets = g_slist_copy (sg_widgets);
for (slist = sg_widgets; slist; slist = slist->next)
- hdy_header_group_remove_gtk_header_bar (HDY_HEADER_GROUP (object),
- GTK_HEADER_BAR (slist->data));
+ hdy_header_group_remove_child (HDY_HEADER_GROUP (object),
+ HDY_HEADER_GROUP_CHILD (slist->data));
g_slist_free (sg_widgets);
}
diff --git a/src/hdy-enums.c.in b/src/hdy-enums.c.in
index 555d038f..9a9fe407 100644
--- a/src/hdy-enums.c.in
+++ b/src/hdy-enums.c.in
@@ -5,6 +5,7 @@
#include "hdy-deck.h"
#include "hdy-enums.h"
#include "hdy-header-bar.h"
+#include "hdy-header-group.h"
#include "hdy-leaflet.h"
#include "hdy-navigation-direction.h"
#include "hdy-squeezer.h"
diff --git a/src/hdy-header-group.c b/src/hdy-header-group.c
index 52d65ea8..6304abf2 100644
--- a/src/hdy-header-group.c
+++ b/src/hdy-header-group.c
@@ -9,11 +9,32 @@
#include "hdy-header-group.h"
+/**
+ * HdyHeaderGroupChildType:
+ * @HDY_HEADER_GROUP_CHILD_TYPE_GTK_HEADER_BAR: The child is a #GtkHeaderBar
+ *
+ * This enumeration value describes the child types handled by #HdyHeaderGroup.
+ *
+ * New values may be added to this enumeration over time.
+ *
+ * Since: 1.0
+ */
+
+struct _HdyHeaderGroupChild
+{
+ GObject parent_instance;
+
+ HdyHeaderGroupChildType type;
+ GObject *object;
+};
+
+G_DEFINE_TYPE (HdyHeaderGroupChild, hdy_header_group_child, G_TYPE_OBJECT)
+
struct _HdyHeaderGroup
{
GObject parent_instance;
- GSList *header_bars;
+ GSList *children;
gboolean decorate_all;
};
@@ -42,26 +63,144 @@ enum {
static GParamSpec *props [N_PROPS];
-static gboolean
-contains (HdyHeaderGroup *self,
- GtkHeaderBar *header_bar)
+static void update_decoration_layouts (HdyHeaderGroup *self);
+
+static void
+object_destroyed_cb (HdyHeaderGroupChild *self,
+ GObject *object)
{
- GSList *header_bars;
+ g_assert (HDY_IS_HEADER_GROUP_CHILD (self));
- for (header_bars = self->header_bars; header_bars != NULL; header_bars = header_bars->next)
- if (header_bars->data == header_bar)
- return TRUE;
+ self->object = NULL;
- return FALSE;
+ g_object_unref (self);
+}
+
+static void
+forward_update_decoration_layouts (HdyHeaderGroupChild *self)
+{
+ HdyHeaderGroup *header_group;
+
+ g_assert (HDY_IS_HEADER_GROUP_CHILD (self));
+
+ header_group = HDY_HEADER_GROUP (g_object_get_data (G_OBJECT (self), "header-group"));
+
+ g_assert (HDY_IS_HEADER_GROUP (header_group));
+
+ update_decoration_layouts (header_group);
+}
+
+static void
+hdy_header_group_child_dispose (GObject *object)
+{
+ HdyHeaderGroupChild *self = (HdyHeaderGroupChild *)object;
+
+ if (self->object) {
+
+ switch (self->type) {
+ case HDY_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;
+ default:
+ g_assert_not_reached ();
+ }
+
+ self->object = NULL;
+ }
+
+ G_OBJECT_CLASS (hdy_header_group_child_parent_class)->dispose (object);
+}
+
+static HdyHeaderGroupChild *
+hdy_header_group_child_new_for_gtk_header_bar (GtkHeaderBar *header_bar)
+{
+ HdyHeaderGroupChild *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 (HDY_TYPE_HEADER_GROUP_CHILD, NULL);
+ self->type = HDY_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 void
+hdy_header_group_child_class_init (HdyHeaderGroupChildClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = hdy_header_group_child_dispose;
+}
+
+static void
+hdy_header_group_child_init (HdyHeaderGroupChild *self)
+{
+}
+
+static void
+hdy_header_group_child_set_decoration_layout (HdyHeaderGroupChild *self,
+ const gchar *layout)
+{
+ g_assert (HDY_IS_HEADER_GROUP_CHILD (self));
+
+ switch (self->type) {
+ case HDY_HEADER_GROUP_CHILD_TYPE_GTK_HEADER_BAR:
+ gtk_header_bar_set_decoration_layout (GTK_HEADER_BAR (self->object), layout);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
}
+static gboolean
+hdy_header_group_child_get_mapped (HdyHeaderGroupChild *self)
+{
+ g_assert (HDY_IS_HEADER_GROUP_CHILD (self));
+
+ switch (self->type) {
+ case HDY_HEADER_GROUP_CHILD_TYPE_GTK_HEADER_BAR:
+ return gtk_widget_get_mapped (GTK_WIDGET (self->object));
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static HdyHeaderGroupChild *
+get_child_for_object (HdyHeaderGroup *self,
+ gpointer object)
+{
+ GSList *children;
+
+ for (children = self->children; children != NULL; children = children->next) {
+ HdyHeaderGroupChild *child = HDY_HEADER_GROUP_CHILD (children->data);
+
+ g_assert (child);
+
+ if (child->object == object)
+ return child;
+ }
+
+ return NULL;
+}
static void
update_decoration_layouts (HdyHeaderGroup *self)
{
- GSList *header_bars;
+ GSList *children;
GtkSettings *settings;
- GtkHeaderBar *start_headerbar = NULL, *end_headerbar = NULL;
+ HdyHeaderGroupChild *start_child = NULL, *end_child = NULL;
g_autofree gchar *layout = NULL;
g_autofree gchar *start_layout = NULL;
g_autofree gchar *end_layout = NULL;
@@ -69,9 +208,9 @@ update_decoration_layouts (HdyHeaderGroup *self)
g_return_if_fail (HDY_IS_HEADER_GROUP (self));
- header_bars = self->header_bars;
+ children = self->children;
- if (header_bars == NULL)
+ if (children == NULL)
return;
settings = gtk_settings_get_default ();
@@ -80,29 +219,31 @@ update_decoration_layouts (HdyHeaderGroup *self)
layout = g_strdup (":");
if (self->decorate_all) {
- for (; header_bars != NULL; header_bars = header_bars->next)
- gtk_header_bar_set_decoration_layout (header_bars->data, layout);
+ for (; children != NULL; children = children->next)
+ hdy_header_group_child_set_decoration_layout (HDY_HEADER_GROUP_CHILD (children->data), layout);
return;
}
- for (; header_bars != NULL; header_bars = header_bars->next) {
- gtk_header_bar_set_decoration_layout (header_bars->data, ":");
+ for (; children != NULL; children = children->next) {
+ HdyHeaderGroupChild *child = HDY_HEADER_GROUP_CHILD (children->data);
- if (!gtk_widget_get_mapped (header_bars->data))
+ hdy_header_group_child_set_decoration_layout (child, ":");
+
+ if (!hdy_header_group_child_get_mapped (child))
continue;
- /* The headerbars are in reverse order in the list. */
- start_headerbar = header_bars->data;
- if (end_headerbar == NULL)
- end_headerbar = header_bars->data;
+ /* The headerbars are in reverse order in the list. */
+ start_child = child;
+ if (end_child == NULL)
+ end_child = child;
}
- if (start_headerbar == NULL || end_headerbar == NULL)
+ if (start_child == NULL || end_child == NULL)
return;
- if (start_headerbar == end_headerbar) {
- gtk_header_bar_set_decoration_layout (start_headerbar, layout);
+ if (start_child == end_child) {
+ hdy_header_group_child_set_decoration_layout (start_child, layout);
return;
}
@@ -115,16 +256,19 @@ update_decoration_layouts (HdyHeaderGroup *self)
start_layout = g_strdup (":");
end_layout = g_strdup (":");
}
- gtk_header_bar_set_decoration_layout (start_headerbar, start_layout);
- gtk_header_bar_set_decoration_layout (end_headerbar, end_layout);
+ hdy_header_group_child_set_decoration_layout (start_child, start_layout);
+ hdy_header_group_child_set_decoration_layout (end_child, end_layout);
}
static void
-header_bar_destroyed (HdyHeaderGroup *self, GtkHeaderBar *header_bar)
+child_destroyed_cb (HdyHeaderGroup *self,
+ HdyHeaderGroupChild *child)
{
- g_return_if_fail (HDY_IS_HEADER_GROUP (self));
+ g_assert (HDY_IS_HEADER_GROUP (self));
+ g_assert (HDY_IS_HEADER_GROUP_CHILD (child));
+ g_assert (g_slist_find (self->children, child) != NULL);
- self->header_bars = g_slist_remove (self->header_bars, header_bar);
+ self->children = g_slist_remove (self->children, child);
g_object_unref (self);
}
@@ -135,78 +279,46 @@ hdy_header_group_new (void)
return g_object_new (HDY_TYPE_HEADER_GROUP, NULL);
}
+static void
+hdy_header_group_add_child (HdyHeaderGroup *self,
+ HdyHeaderGroupChild *child)
+{
+ g_assert (HDY_IS_HEADER_GROUP (self));
+ g_assert (HDY_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);
+}
+
/**
* hdy_header_group_add_gtk_header_bar:
* @self: a #HdyHeaderGroup
* @header_bar: the #GtkHeaderBar to add
*
- * Adds a header bar to a #HdyHeaderGroup. The decoration layout of the
- * widgets will be edited depending on their position in the composite header
- * bar, the start widget displaying only the start of the user's decoration
- * layout and the end widget displaying only its end while widgets in the middle
- * won't display anything.
- * See gtk_header_bar_set_decoration_layout().
- *
+ * 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
hdy_header_group_add_gtk_header_bar (HdyHeaderGroup *self,
GtkHeaderBar *header_bar)
{
- g_return_if_fail (HDY_IS_HEADER_GROUP (self));
- g_return_if_fail (GTK_IS_HEADER_BAR (header_bar));
-
- g_signal_connect_swapped (header_bar, "map", G_CALLBACK (update_decoration_layouts), self);
- g_signal_connect_swapped (header_bar, "unmap", G_CALLBACK (update_decoration_layouts), self);
- self->header_bars = g_slist_prepend (self->header_bars, header_bar);
-
- g_object_ref (self);
-
- g_signal_connect_swapped (header_bar, "destroy", G_CALLBACK (header_bar_destroyed), self);
+ HdyHeaderGroupChild *child;
- update_decoration_layouts (self);
-}
-
-
-/**
- * hdy_header_group_remove_gtk_header_bar:
- * @self: a #HdyHeaderGroup
- * @header_bar: the #GtkHeaderBar to remove
- *
- * Removes a widget from a #HdyHeaderGroup
- **/
-void
-hdy_header_group_remove_gtk_header_bar (HdyHeaderGroup *self,
- GtkHeaderBar *header_bar)
-{
g_return_if_fail (HDY_IS_HEADER_GROUP (self));
g_return_if_fail (GTK_IS_HEADER_BAR (header_bar));
- g_return_if_fail (contains (self, header_bar));
+ g_return_if_fail (get_child_for_object (self, header_bar) == NULL);
- self->header_bars = g_slist_remove (self->header_bars, header_bar);
-
- g_signal_handlers_disconnect_by_data (header_bar, self);
-
- g_object_unref (self);
-}
-
-
-/**
- * hdy_header_group_get_children:
- * @self: a #HdyHeaderGroup
- *
- * Returns the list of headerbars associated with @self.
- *
- * Returns: (element-type GtkHeaderBar) (transfer none): a #GSList of
- * headerbars. The list is owned by libhandy and should not be modified.
- **/
-GSList *
-hdy_header_group_get_children (HdyHeaderGroup *self)
-{
- g_return_val_if_fail (HDY_IS_HEADER_GROUP (self), NULL);
-
- return self->header_bars;
+ child = hdy_header_group_child_new_for_gtk_header_bar (header_bar);
+ hdy_header_group_add_child (self, child);
}
typedef struct {
@@ -235,8 +347,8 @@ hdy_header_group_dispose (GObject *object)
{
HdyHeaderGroup *self = (HdyHeaderGroup *)object;
- g_slist_free_full (self->header_bars, (GDestroyNotify) g_object_unref);
- self->header_bars = NULL;
+ g_slist_free_full (self->children, (GDestroyNotify) g_object_unref);
+ self->children = NULL;
G_OBJECT_CLASS (hdy_header_group_parent_class)->dispose (object);
}
@@ -475,7 +587,6 @@ hdy_header_group_buildable_custom_finished (GtkBuildable *buildable,
{
GSList *l;
GSListSubParserData *data;
- GObject *object;
if (strcmp (tagname, "headerbars") != 0)
return;
@@ -483,15 +594,18 @@ hdy_header_group_buildable_custom_finished (GtkBuildable *buildable,
data = (GSListSubParserData*)user_data;
data->items = g_slist_reverse (data->items);
- for (l = data->items; l; l = l->next)
- {
- ItemData *item_data = l->data;
- object = gtk_builder_get_object (builder, item_data->name);
- if (!object)
- continue;
+ 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))
hdy_header_group_add_gtk_header_bar (HDY_HEADER_GROUP (data->object),
GTK_HEADER_BAR (object));
- }
+ }
+
g_slist_free_full (data->items, item_data_free);
g_slice_free (GSListSubParserData, data);
}
@@ -540,6 +654,120 @@ hdy_header_group_buildable_init (GtkBuildableIface *iface)
iface->custom_finished = hdy_header_group_buildable_custom_finished;
}
+/**
+ * hdy_header_group_child_get_gtk_header_bar:
+ * @self: a #HdyHeaderGroupChild
+ *
+ * Gets the child #GtkHeaderBar.
+ * Use hdy_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 *
+hdy_header_group_child_get_gtk_header_bar (HdyHeaderGroupChild *self)
+{
+ g_return_val_if_fail (HDY_IS_HEADER_GROUP_CHILD (self), NULL);
+ g_return_val_if_fail (self->type == HDY_HEADER_GROUP_CHILD_TYPE_GTK_HEADER_BAR, NULL);
+
+ return GTK_HEADER_BAR (self->object);
+}
+
+/**
+ * hdy_header_group_child_get_child_type:
+ * @self: a #HdyHeaderGroupChild
+ *
+ * Gets the child type.
+ *
+ * Returns: the child type.
+ *
+ * Since: 1.0
+ */
+HdyHeaderGroupChildType
+hdy_header_group_child_get_child_type (HdyHeaderGroupChild *self)
+{
+ g_return_val_if_fail (HDY_IS_HEADER_GROUP_CHILD (self), HDY_HEADER_GROUP_CHILD_TYPE_GTK_HEADER_BAR);
+
+ return self->type;
+}
+
+/**
+ * hdy_header_group_get_children:
+ * @self: a #HdyHeaderGroup
+ *
+ * Returns the list of children associated with @self.
+ *
+ * Returns: (element-type HdyHeaderGroupChild) (transfer none): the #GSList of
+ * children. The list is owned by libhandy and should not be modified.
+ *
+ * Since: 1.0
+ */
+GSList *
+hdy_header_group_get_children (HdyHeaderGroup *self)
+{
+ g_return_val_if_fail (HDY_IS_HEADER_GROUP (self), NULL);
+
+ return self->children;
+}
+
+static void
+remove_child (HdyHeaderGroup *self,
+ HdyHeaderGroupChild *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);
+}
+
+/**
+ * hdy_header_group_remove_gtk_header_bar:
+ * @self: a #HdyHeaderGroup
+ * @header_bar: the #GtkHeaderBar to remove
+ *
+ * Removes @header_bar from @self.
+ *
+ * Since: 1.0
+ */
+void
+hdy_header_group_remove_gtk_header_bar (HdyHeaderGroup *self,
+ GtkHeaderBar *header_bar)
+{
+ HdyHeaderGroupChild *child;
+
+ g_return_if_fail (HDY_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);
+}
+
+/**
+ * hdy_header_group_remove_child:
+ * @self: a #HdyHeaderGroup
+ * @child: the #HdyHeaderGroupChild to remove
+ *
+ * Removes @child from @self.
+ *
+ * Since: 1.0
+ */
+void
+hdy_header_group_remove_child (HdyHeaderGroup *self,
+ HdyHeaderGroupChild *child)
+{
+ g_return_if_fail (HDY_IS_HEADER_GROUP (self));
+ g_return_if_fail (HDY_IS_HEADER_GROUP_CHILD (child));
+ g_return_if_fail (g_slist_find (self->children, child) != NULL);
+
+ remove_child (self, child);
+}
+
/**
* hdy_header_group_set_decorate_all:
* @self: a #HdyHeaderGroup
diff --git a/src/hdy-header-group.h b/src/hdy-header-group.h
index af7ae412..50a3127a 100644
--- a/src/hdy-header-group.h
+++ b/src/hdy-header-group.h
@@ -14,10 +14,22 @@
G_BEGIN_DECLS
+#define HDY_TYPE_HEADER_GROUP_CHILD (hdy_header_group_child_get_type())
+
+G_DECLARE_FINAL_TYPE (HdyHeaderGroupChild, hdy_header_group_child, HDY, HEADER_GROUP_CHILD, GObject)
+
#define HDY_TYPE_HEADER_GROUP (hdy_header_group_get_type())
G_DECLARE_FINAL_TYPE (HdyHeaderGroup, hdy_header_group, HDY, HEADER_GROUP, GObject)
+typedef enum {
+ HDY_HEADER_GROUP_CHILD_TYPE_GTK_HEADER_BAR,
+} HdyHeaderGroupChildType;
+
+GtkHeaderBar *hdy_header_group_child_get_gtk_header_bar (HdyHeaderGroupChild *self);
+
+HdyHeaderGroupChildType hdy_header_group_child_get_child_type (HdyHeaderGroupChild *self);
+
HdyHeaderGroup *hdy_header_group_new (void);
void hdy_header_group_add_gtk_header_bar (HdyHeaderGroup *self,
@@ -27,6 +39,8 @@ GSList *hdy_header_group_get_children (HdyHeaderGroup *self);
void hdy_header_group_remove_gtk_header_bar (HdyHeaderGroup *self,
GtkHeaderBar *header_bar);
+void hdy_header_group_remove_child (HdyHeaderGroup *self,
+ HdyHeaderGroupChild *child);
gboolean hdy_header_group_get_decorate_all (HdyHeaderGroup *self);
void hdy_header_group_set_decorate_all (HdyHeaderGroup *self,
diff --git a/src/meson.build b/src/meson.build
index 2dfdd172..72f0efcb 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -11,6 +11,7 @@ hdy_public_enum_headers = [
'hdy-carousel.h',
'hdy-deck.h',
'hdy-header-bar.h',
+ 'hdy-header-group.h',
'hdy-leaflet.h',
'hdy-navigation-direction.h',
'hdy-squeezer.h',
diff --git a/tests/test-header-group.c b/tests/test-header-group.c
index 5f5913b2..2a902a9f 100644
--- a/tests/test-header-group.c
+++ b/tests/test-header-group.c
@@ -35,29 +35,24 @@ test_hdy_header_group_decorate_all (void)
static void
test_hdy_header_group_add_remove (void)
{
- HdyHeaderGroup *hg;
- GtkHeaderBar *bar1, *bar2;
-
- hg = HDY_HEADER_GROUP (hdy_header_group_new ());
-
- bar1 = GTK_HEADER_BAR (gtk_header_bar_new ());
- bar2 = GTK_HEADER_BAR (gtk_header_bar_new ());
+ g_autoptr (HdyHeaderGroup) hg = HDY_HEADER_GROUP (hdy_header_group_new ());
+ g_autoptr (GtkHeaderBar) bar1 = GTK_HEADER_BAR (g_object_ref_sink (gtk_header_bar_new ()));
+ g_autoptr (GtkHeaderBar) bar2 = GTK_HEADER_BAR (g_object_ref_sink (gtk_header_bar_new ()));
g_assert_cmpint (g_slist_length (hdy_header_group_get_children (hg)), ==, 0);
- hdy_header_group_add_gtk_header_bar (hg, GTK_HEADER_BAR (bar1));
+ hdy_header_group_add_gtk_header_bar (hg, bar1);
g_assert_cmpint (g_slist_length (hdy_header_group_get_children (hg)), ==, 1);
- hdy_header_group_add_gtk_header_bar (hg, GTK_HEADER_BAR (bar2));
+ hdy_header_group_add_gtk_header_bar (hg, bar2);
g_assert_cmpint (g_slist_length (hdy_header_group_get_children (hg)), ==, 2);
- hdy_header_group_remove_gtk_header_bar (hg, GTK_HEADER_BAR (bar2));
+ hdy_header_group_remove_gtk_header_bar (hg, bar2);
g_assert_cmpint (g_slist_length (hdy_header_group_get_children (hg)), ==, 1);
- hdy_header_group_remove_gtk_header_bar (hg, GTK_HEADER_BAR (bar1));
- g_assert_cmpint (g_slist_length (hdy_header_group_get_children (hg)), ==, 0);
+ hdy_header_group_remove_gtk_header_bar (hg, bar1);
- g_object_unref (hg);
+ g_assert_cmpint (g_slist_length (hdy_header_group_get_children (hg)), ==, 0);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]