From d8ab29a431c07bf7e3562d260ca7c6b6a6e1ab24 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 22 Dec 2019 23:10:01 -0500 Subject: [PATCH] columnview: Add a GtkColumnViewColumn:expand property This will be used to determine how to distribute available extra space in a column view. --- docs/reference/gtk/gtk4-sections.txt | 2 + gtk/gtkcolumnviewcolumn.c | 66 ++++++++++++++++++++++++++++ gtk/gtkcolumnviewcolumn.h | 6 +++ 3 files changed, 74 insertions(+) diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt index 429f73534e..1849b4dc3c 100644 --- a/docs/reference/gtk/gtk4-sections.txt +++ b/docs/reference/gtk/gtk4-sections.txt @@ -537,6 +537,8 @@ gtk_column_view_column_set_reorderable gtk_column_view_column_get_reorderable gtk_column_view_column_set_fixed_width gtk_column_view_column_get_fixed_width +gtk_column_view_column_set_expand +gtk_column_view_column_get_expand GTK_COLUMN_VIEW_COLUMN GTK_COLUMN_VIEW_COLUMN_CLASS diff --git a/gtk/gtkcolumnviewcolumn.c b/gtk/gtkcolumnviewcolumn.c index 1929149464..2d2262dbef 100644 --- a/gtk/gtkcolumnviewcolumn.c +++ b/gtk/gtkcolumnviewcolumn.c @@ -66,6 +66,7 @@ struct _GtkColumnViewColumn guint visible : 1; guint resizable : 1; + guint expand : 1; guint reorderable : 1; /* This list isn't sorted - this is just caching for performance */ @@ -86,6 +87,7 @@ enum PROP_SORTER, PROP_VISIBLE, PROP_RESIZABLE, + PROP_EXPAND, PROP_REORDERABLE, PROP_FIXED_WIDTH, @@ -145,6 +147,10 @@ gtk_column_view_column_get_property (GObject *object, g_value_set_boolean (value, self->resizable); break; + case PROP_EXPAND: + g_value_set_boolean (value, self->expand); + break; + case PROP_REORDERABLE: g_value_set_boolean (value, self->reorderable); break; @@ -189,6 +195,10 @@ gtk_column_view_column_set_property (GObject *object, gtk_column_view_column_set_resizable (self, g_value_get_boolean (value)); break; + case PROP_EXPAND: + gtk_column_view_column_set_expand (self, g_value_get_boolean (value)); + break; + case PROP_REORDERABLE: gtk_column_view_column_set_reorderable (self, g_value_get_boolean (value)); break; @@ -284,6 +294,18 @@ gtk_column_view_column_class_init (GtkColumnViewColumnClass *klass) FALSE, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + /** + * GtkColumnViewColumn:expand: + * + * Column gets share of extra width allocated to the view + */ + properties[PROP_EXPAND] = + g_param_spec_boolean ("expand", + P_("Expand"), + P_("column gets share of extra width"), + FALSE, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + /** * GtkColumnViewColumn:reorderable: * @@ -319,6 +341,7 @@ gtk_column_view_column_init (GtkColumnViewColumn *self) self->natural_size_request = -1; self->visible = TRUE; self->resizable = FALSE; + self->expand = FALSE; self->reorderable = FALSE; self->fixed_width = -1; } @@ -838,6 +861,49 @@ gtk_column_view_column_get_resizable (GtkColumnViewColumn *self) return self->resizable; } +/** + * gtk_column_view_column_set_expand: + * @self: a #GtkColumnViewColumn + * @expand: %TRUE if this column should expand to fill available sace + * + * Sets the column to take available extra space. + * + * The extra space is shared equally amongst all columns that + * have the expand set to %TRUE. + */ +void +gtk_column_view_column_set_expand (GtkColumnViewColumn *self, + gboolean expand) +{ + g_return_if_fail (GTK_IS_COLUMN_VIEW_COLUMN (self)); + + if (self->expand == expand) + return; + + self->expand = expand; + + if (self->visible && self->view) + gtk_widget_queue_resize (GTK_WIDGET (self->view)); + + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_EXPAND]); +} + +/** + * gtk_column_view_get_expand: + * @self: a #GtkColumnViewColumn + * + * Returns whether this column should expand. + * + * Returns: %TRUE if this column expands + */ +gboolean +gtk_column_view_column_get_expand (GtkColumnViewColumn *self) +{ + g_return_val_if_fail (GTK_IS_COLUMN_VIEW_COLUMN (self), TRUE); + + return self->expand; +} + /** * gtk_column_view_column_set_reorderable: * @self: a #GtkColumnViewColumn diff --git a/gtk/gtkcolumnviewcolumn.h b/gtk/gtkcolumnviewcolumn.h index 5163cc587b..310c21c22f 100644 --- a/gtk/gtkcolumnviewcolumn.h +++ b/gtk/gtkcolumnviewcolumn.h @@ -90,6 +90,12 @@ void gtk_column_view_column_set_resizable (GtkColu GDK_AVAILABLE_IN_ALL gboolean gtk_column_view_column_get_resizable (GtkColumnViewColumn *self); +GDK_AVAILABLE_IN_ALL +void gtk_column_view_column_set_expand (GtkColumnViewColumn *self, + gboolean expand); +GDK_AVAILABLE_IN_ALL +gboolean gtk_column_view_column_get_expand (GtkColumnViewColumn *self); + GDK_AVAILABLE_IN_ALL void gtk_column_view_column_set_reorderable (GtkColumnViewColumn *self, gboolean reorderable);