summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2023-03-29 10:36:18 +0200
committerBenjamin Otte <otte@redhat.com>2023-04-01 20:49:40 +0200
commit880aea513f5921be2dc36bc93334add01ce6b5a9 (patch)
tree56b3c8a6d6f03f84c49f1c15059a99953ae1ea08
parentd1bc552b5fb8b2b53100ac277eb58f590fb9d49a (diff)
downloadgtk+-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.c104
-rw-r--r--gtk/gtkcolumnview.h7
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