diff options
author | Matthias Clasen <mclasen@redhat.com> | 2023-04-12 15:57:10 +0200 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2023-04-12 15:57:10 +0200 |
commit | 2d16ffe3267434dba95c2c903004509528cfcca0 (patch) | |
tree | fb9c60c3b11afee0cb1eb4dea722499046c2c3e6 | |
parent | 290eda6243a455326cc416926b4746f7577e6418 (diff) | |
download | gtk+-2d16ffe3267434dba95c2c903004509528cfcca0.tar.gz |
columnview: Add a header factory
-rw-r--r-- | gtk/gtkcolumnview.c | 64 | ||||
-rw-r--r-- | gtk/gtkcolumnview.h | 7 |
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 |