From 4a659c169d4f1eff0fff51179b81e9e279e8ab22 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 20 Dec 2019 14:07:14 -0500 Subject: [PATCH] columnviewcolumn: Add a resizable property This will be used for interactive column resizing in the future. --- gtk/gtkcolumnviewcolumn.c | 62 ++++++++++++++++++++++++++++++++++++++- gtk/gtkcolumnviewcolumn.h | 6 ++++ 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/gtk/gtkcolumnviewcolumn.c b/gtk/gtkcolumnviewcolumn.c index a48df79046..daf70d6a81 100644 --- a/gtk/gtkcolumnviewcolumn.c +++ b/gtk/gtkcolumnviewcolumn.c @@ -63,7 +63,8 @@ struct _GtkColumnViewColumn int fixed_width; - gboolean visible; + guint visible : 1; + guint resizable : 1; /* This list isn't sorted - this is just caching for performance */ GtkColumnViewCell *first_cell; /* no reference, just caching */ @@ -82,6 +83,7 @@ enum PROP_TITLE, PROP_SORTER, PROP_VISIBLE, + PROP_RESIZABLE, PROP_FIXED_WIDTH, N_PROPS @@ -136,6 +138,10 @@ gtk_column_view_column_get_property (GObject *object, g_value_set_boolean (value, self->visible); break; + case PROP_RESIZABLE: + g_value_set_boolean (value, self->resizable); + break; + case PROP_FIXED_WIDTH: g_value_set_int (value, self->fixed_width); break; @@ -172,6 +178,10 @@ gtk_column_view_column_set_property (GObject *object, gtk_column_view_column_set_visible (self, g_value_get_boolean (value)); break; + case PROP_RESIZABLE: + gtk_column_view_column_set_resizable (self, g_value_get_boolean (value)); + break; + case PROP_FIXED_WIDTH: gtk_column_view_column_set_fixed_width (self, g_value_get_int (value)); break; @@ -246,6 +256,18 @@ gtk_column_view_column_class_init (GtkColumnViewColumnClass *klass) TRUE, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + /** + * GtkColumnViewColumn:resizable: + * + * Whether this column is resizable + */ + properties[PROP_RESIZABLE] = + g_param_spec_boolean ("resizable", + P_("Resizable"), + P_("Whether this column is resizable"), + FALSE, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + /** * GtkColumnViewColumn:fixed-width: * @@ -268,6 +290,7 @@ gtk_column_view_column_init (GtkColumnViewColumn *self) self->minimum_size_request = -1; self->natural_size_request = -1; self->visible = TRUE; + self->resizable = FALSE; self->fixed_width = -1; } @@ -754,6 +777,43 @@ gtk_column_view_column_get_visible (GtkColumnViewColumn *self) return self->visible; } +/** + * gtk_column_view_column_set_resizable: + * @self: a #GtkColumnViewColumn + * @resizable: whether this column should be resizable + * + * Sets whether this column should be resizable by dragging. + */ +void +gtk_column_view_column_set_resizable (GtkColumnViewColumn *self, + gboolean resizable) +{ + g_return_if_fail (GTK_IS_COLUMN_VIEW_COLUMN (self)); + + if (self->resizable == resizable) + return; + + self->resizable = resizable; + + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_RESIZABLE]); +} + +/** + * gtk_column_view_get_resizable: + * @self: a #GtkColumnView + * + * Returns whether this column is resizable. + * + * Returns: %TRUE if this column is resizable + */ +gboolean +gtk_column_view_column_get_resizable (GtkColumnViewColumn *self) +{ + g_return_val_if_fail (GTK_IS_COLUMN_VIEW_COLUMN (self), TRUE); + + return self->resizable; +} + /** * gtk_column_view_column_set_fixed_width: * @self: a #GtkColumnViewColumn diff --git a/gtk/gtkcolumnviewcolumn.h b/gtk/gtkcolumnviewcolumn.h index 32392612b2..3be8a1cb7d 100644 --- a/gtk/gtkcolumnviewcolumn.h +++ b/gtk/gtkcolumnviewcolumn.h @@ -84,6 +84,12 @@ void gtk_column_view_column_set_fixed_width (GtkColu GDK_AVAILABLE_IN_ALL int gtk_column_view_column_get_fixed_width (GtkColumnViewColumn *self); +GDK_AVAILABLE_IN_ALL +void gtk_column_view_column_set_resizable (GtkColumnViewColumn *self, + gboolean resizable); +GDK_AVAILABLE_IN_ALL +gboolean gtk_column_view_column_get_resizable (GtkColumnViewColumn *self); + G_END_DECLS #endif /* __GTK_COLUMN_VIEW_COLUMN_H__ */