diff options
author | Benjamin Otte <otte@redhat.com> | 2023-03-29 10:36:18 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2023-04-01 20:49:40 +0200 |
commit | 880aea513f5921be2dc36bc93334add01ce6b5a9 (patch) | |
tree | 56b3c8a6d6f03f84c49f1c15059a99953ae1ea08 | |
parent | d1bc552b5fb8b2b53100ac277eb58f590fb9d49a (diff) | |
download | gtk+-880aea513f5921be2dc36bc93334add01ce6b5a9.tar.gz |
columnview: Add gtk_column_view_add_row_factory()
This allows setting a factory to toggle per-row properties.
Implemented are selectable, focusable and activatable.
These are meant to supercede the per-cell selectable and activatable
properties, which make no sense individually.
The focus property makes it possible to focus rows instead of cells,
which is the default behavior.
-rw-r--r-- | gtk/gtkcolumnview.c | 104 | ||||
-rw-r--r-- | gtk/gtkcolumnview.h | 7 |
2 files changed, 93 insertions, 18 deletions
diff --git a/gtk/gtkcolumnview.c b/gtk/gtkcolumnview.c index addb92ef32..5437d684c4 100644 --- a/gtk/gtkcolumnview.c +++ b/gtk/gtkcolumnview.c @@ -223,6 +223,7 @@ enum PROP_HSCROLL_POLICY, PROP_MODEL, PROP_REORDERABLE, + PROP_ROW_FACTORY, PROP_SHOW_ROW_SEPARATORS, PROP_SHOW_COLUMN_SEPARATORS, PROP_SINGLE_CLICK_ACTIVATE, @@ -635,6 +636,14 @@ gtk_column_view_get_property (GObject *object, g_value_set_object (value, gtk_list_view_get_model (self->listview)); break; + case PROP_REORDERABLE: + g_value_set_boolean (value, gtk_column_view_get_reorderable (self)); + break; + + case PROP_ROW_FACTORY: + g_value_set_object (value, gtk_column_view_get_row_factory (self)); + break; + case PROP_SHOW_ROW_SEPARATORS: g_value_set_boolean (value, gtk_list_view_get_show_separators (self->listview)); break; @@ -659,10 +668,6 @@ gtk_column_view_get_property (GObject *object, g_value_set_boolean (value, gtk_column_view_get_single_click_activate (self)); break; - case PROP_REORDERABLE: - g_value_set_boolean (value, gtk_column_view_get_reorderable (self)); - break; - case PROP_TAB_BEHAVIOR: g_value_set_enum (value, gtk_list_view_get_tab_behavior (self->listview)); break; @@ -718,6 +723,14 @@ gtk_column_view_set_property (GObject *object, gtk_column_view_set_model (self, g_value_get_object (value)); break; + case PROP_REORDERABLE: + gtk_column_view_set_reorderable (self, g_value_get_boolean (value)); + break; + + case PROP_ROW_FACTORY: + gtk_column_view_set_row_factory (self, g_value_get_object (value)); + break; + case PROP_SHOW_ROW_SEPARATORS: gtk_column_view_set_show_row_separators (self, g_value_get_boolean (value)); break; @@ -746,10 +759,6 @@ gtk_column_view_set_property (GObject *object, gtk_column_view_set_single_click_activate (self, g_value_get_boolean (value)); break; - case PROP_REORDERABLE: - gtk_column_view_set_reorderable (self, g_value_get_boolean (value)); - break; - case PROP_TAB_BEHAVIOR: gtk_column_view_set_tab_behavior (self, g_value_get_enum (value)); break; @@ -827,6 +836,28 @@ gtk_column_view_class_init (GtkColumnViewClass *klass) G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** + * GtkColumnView:reorderable: (attributes org.gtk.Property.get=gtk_column_view_get_reorderable org.gtk.Property.set=gtk_column_view_set_reorderable) + * + * Whether columns are reorderable. + */ + properties[PROP_REORDERABLE] = + g_param_spec_boolean ("reorderable", NULL, NULL, + TRUE, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + + /** + * GtkColumnView:row-factory: (attributes org.gtk.Property.get=gtk_column_view_get_row_factory org.gtk.Property.set=gtk_column_view_set_row_factory) + * + * The factory used for configuring rows. + * + * Since: 4.12 + */ + properties[PROP_ROW_FACTORY] = + g_param_spec_object ("row-factory", NULL, NULL, + GTK_TYPE_LIST_ITEM_FACTORY, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + + /** * GtkColumnView:show-row-separators: (attributes org.gtk.Property.get=gtk_column_view_get_show_row_separators org.gtk.Property.set=gtk_column_view_set_show_row_separators) * * Show separators between rows. @@ -867,16 +898,6 @@ gtk_column_view_class_init (GtkColumnViewClass *klass) G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); /** - * GtkColumnView:reorderable: (attributes org.gtk.Property.get=gtk_column_view_get_reorderable org.gtk.Property.set=gtk_column_view_set_reorderable) - * - * Whether columns are reorderable. - */ - properties[PROP_REORDERABLE] = - g_param_spec_boolean ("reorderable", NULL, NULL, - TRUE, - G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); - - /** * GtkColumnView:tab-behavior: (attributes org.gtk.Property.get=gtk_column_view_get_tab_behavior org.gtk.Property.set=gtk_column_view_set_tab_behavior) * * Behavior of the <kbd>Tab</kbd> key @@ -1998,6 +2019,53 @@ gtk_column_view_get_enable_rubberband (GtkColumnView *self) } /** + * gtk_column_view_set_row_factory: (attributes org.gtk.Method.set_property=row-factory) + * @self: a `GtkColumnView` + * @factory: (nullable): The row factory + * + * Sets the factory used for configuring rows. The factory must be for configuring + * [class@Gtk.ColumnViewRow] objects. + * + * If this factory is not set - which is the default - then the defaults will be used. + * + * This factory is not used to set the widgets displayed in the individual cells. For + * that see [method@GtkColumnViewColumn.set_factory] and [class@GtkColumnViewCell]. + * + * Since: 4.12 + */ +void +gtk_column_view_set_row_factory (GtkColumnView *self, + GtkListItemFactory *factory) +{ + g_return_if_fail (GTK_IS_COLUMN_VIEW (self)); + + if (factory == gtk_list_view_get_factory (self->listview)) + return; + + gtk_list_view_set_factory (self->listview, factory); + + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ROW_FACTORY]); +} + +/** + * gtk_column_view_get_row_factory: (attributes org.gtk.Method.get_property=row-factory) + * @self: a `GtkColumnView` + * + * Gets the factory set via [method@Gtk.ColumnView.set_row_factory]. + * + * Returns: (nullable) (transfer none): The factory + * + * Since: 4.12 + */ +GtkListItemFactory * +gtk_column_view_get_row_factory (GtkColumnView *self) +{ + g_return_val_if_fail (GTK_IS_COLUMN_VIEW (self), FALSE); + + return gtk_list_view_get_factory (self->listview); +} + +/** * gtk_column_view_set_tab_behavior: (attributes org.gtk.Method.set_property=tab-behavior) * @self: a `GtkColumnView` * @tab_behavior: The desired tab behavior diff --git a/gtk/gtkcolumnview.h b/gtk/gtkcolumnview.h index aa04cd9363..afccfcfd9d 100644 --- a/gtk/gtkcolumnview.h +++ b/gtk/gtkcolumnview.h @@ -114,5 +114,12 @@ void gtk_column_view_set_tab_behavior (GtkColumnView GDK_AVAILABLE_IN_4_12 gboolean gtk_column_view_get_tab_behavior (GtkColumnView *self); +GDK_AVAILABLE_IN_4_12 +void gtk_column_view_set_row_factory (GtkColumnView *self, + GtkListItemFactory *factory); +GDK_AVAILABLE_IN_4_12 +GtkListItemFactory * + gtk_column_view_get_row_factory (GtkColumnView *self); + G_END_DECLS |