summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2023-04-12 15:57:10 +0200
committerMatthias Clasen <mclasen@redhat.com>2023-04-12 15:57:10 +0200
commit2d16ffe3267434dba95c2c903004509528cfcca0 (patch)
treefb9c60c3b11afee0cb1eb4dea722499046c2c3e6
parent290eda6243a455326cc416926b4746f7577e6418 (diff)
downloadgtk+-2d16ffe3267434dba95c2c903004509528cfcca0.tar.gz
columnview: Add a header factory
-rw-r--r--gtk/gtkcolumnview.c64
-rw-r--r--gtk/gtkcolumnview.h7
2 files changed, 71 insertions, 0 deletions
diff --git a/gtk/gtkcolumnview.c b/gtk/gtkcolumnview.c
index b6726707f8..9f67a6bc55 100644
--- a/gtk/gtkcolumnview.c
+++ b/gtk/gtkcolumnview.c
@@ -220,6 +220,7 @@ enum
PROP_COLUMNS,
PROP_ENABLE_RUBBERBAND,
PROP_HADJUSTMENT,
+ PROP_HEADER_FACTORY,
PROP_HSCROLL_POLICY,
PROP_MODEL,
PROP_REORDERABLE,
@@ -628,6 +629,10 @@ gtk_column_view_get_property (GObject *object,
g_value_set_object (value, self->hadjustment);
break;
+ case PROP_HEADER_FACTORY:
+ g_value_set_object (value, gtk_column_view_get_header_factory (self));
+ break;
+
case PROP_HSCROLL_POLICY:
g_value_set_enum (value, gtk_scrollable_get_hscroll_policy (GTK_SCROLLABLE (self->listview)));
break;
@@ -711,6 +716,10 @@ gtk_column_view_set_property (GObject *object,
}
break;
+ case PROP_HEADER_FACTORY:
+ gtk_column_view_set_header_factory (self, g_value_get_object (value));
+ break;
+
case PROP_HSCROLL_POLICY:
if (gtk_scrollable_get_hscroll_policy (GTK_SCROLLABLE (self->listview)) != g_value_get_enum (value))
{
@@ -826,6 +835,18 @@ gtk_column_view_class_init (GtkColumnViewClass *klass)
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
/**
+ * GtkColumnView:header-factory: (attributes org.gtk.Property.get=gtk_column_view_get_header_factory org.gtk.Property.set=gtk_column_view_set_header_factory)
+ *
+ * The factory used for creating section headers.
+ *
+ * Since: 4.12
+ */
+ properties[PROP_HEADER_FACTORY] =
+ g_param_spec_object ("header-factory", NULL, NULL,
+ GTK_TYPE_LIST_ITEM_FACTORY,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
+ /**
* GtkColumnView:model: (attributes org.gtk.Property.get=gtk_column_view_get_model org.gtk.Property.set=gtk_column_view_set_model)
*
* Model for the items displayed.
@@ -2019,6 +2040,49 @@ gtk_column_view_get_enable_rubberband (GtkColumnView *self)
}
/**
+ * gtk_column_view_set_header_factory: (attributes org.gtk.Method.set_property=header-factory)
+ * @self: a `GtkColumnView`
+ * @factory: (nullable): The header factory
+ *
+ * Sets the factory used for creating seciton headers.
+ *
+ * If this factory is not set - which is the default - then no headers will be used.
+ *
+ * Since: 4.12
+ */
+void
+gtk_column_view_set_header_factory (GtkColumnView *self,
+ GtkListItemFactory *factory)
+{
+ g_return_if_fail (GTK_IS_COLUMN_VIEW (self));
+
+ if (factory == gtk_list_view_get_header_factory (self->listview))
+ return;
+
+ gtk_list_view_set_header_factory (self->listview, factory);
+
+ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_HEADER_FACTORY]);
+}
+
+/**
+ * gtk_column_view_get_header_factory: (attributes org.gtk.Method.get_property=header-factory)
+ * @self: a `GtkColumnView`
+ *
+ * Gets the factory set via [method@Gtk.ColumnView.set_header_factory].
+ *
+ * Returns: (nullable) (transfer none): The factory
+ *
+ * Since: 4.12
+ */
+GtkListItemFactory *
+gtk_column_view_get_header_factory (GtkColumnView *self)
+{
+ g_return_val_if_fail (GTK_IS_COLUMN_VIEW (self), NULL);
+
+ return gtk_list_view_get_header_factory (self->listview);
+}
+
+/**
* gtk_column_view_set_row_factory: (attributes org.gtk.Method.set_property=row-factory)
* @self: a `GtkColumnView`
* @factory: (nullable): The row factory
diff --git a/gtk/gtkcolumnview.h b/gtk/gtkcolumnview.h
index 4d6d03d040..4d222903b3 100644
--- a/gtk/gtkcolumnview.h
+++ b/gtk/gtkcolumnview.h
@@ -122,5 +122,12 @@ GDK_AVAILABLE_IN_4_12
GtkListItemFactory *
gtk_column_view_get_row_factory (GtkColumnView *self);
+GDK_AVAILABLE_IN_4_12
+void gtk_column_view_set_header_factory (GtkColumnView *self,
+ GtkListItemFactory *factory);
+GDK_AVAILABLE_IN_4_12
+GtkListItemFactory *
+ gtk_column_view_get_header_factory (GtkColumnView *self);
+
G_END_DECLS