diff options
Diffstat (limited to 'gtk/gtkcolumnview.c')
-rw-r--r-- | gtk/gtkcolumnview.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/gtk/gtkcolumnview.c b/gtk/gtkcolumnview.c index 7ae41f8b1c..e94875ae71 100644 --- a/gtk/gtkcolumnview.c +++ b/gtk/gtkcolumnview.c @@ -691,6 +691,7 @@ gtk_column_view_remove_column (GtkColumnView *self, g_object_unref (item); if (item == column) break; + } gtk_column_view_sorter_remove_column (GTK_COLUMN_VIEW_SORTER (self->sorter), column); @@ -698,6 +699,55 @@ gtk_column_view_remove_column (GtkColumnView *self, g_list_store_remove (self->columns, i); } +/** + * gtk_column_view_insert_column: + * @self: a #GtkColumnView + * @position: the position to insert @column at + * @column: the #GtkColumnViewColumn to insert + * + * Inserts a column at the given position in the columns of @self. + * + * If @column is already a column of @self, it will be repositioned. + */ +void +gtk_column_view_insert_column (GtkColumnView *self, + guint position, + GtkColumnViewColumn *column) +{ + g_return_if_fail (GTK_IS_COLUMN_VIEW (self)); + g_return_if_fail (GTK_IS_COLUMN_VIEW_COLUMN (column)); + g_return_if_fail (gtk_column_view_column_get_column_view (column) == NULL || + gtk_column_view_column_get_column_view (column) == self); + g_return_if_fail (position <= g_list_model_get_n_items (G_LIST_MODEL (self->columns))); + + g_object_ref (column); + + if (gtk_column_view_column_get_column_view (column) == self) + { + guint i; + + for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (self->columns)); i++) + { + GtkColumnViewColumn *item = g_list_model_get_item (G_LIST_MODEL (self->columns), i); + + g_object_unref (item); + if (item == column) + { + g_list_store_remove (self->columns, i); + break; + } + } + } + else + gtk_column_view_column_set_column_view (column, self); + + g_list_store_insert (self->columns, position, column); + + gtk_column_view_column_queue_resize (column); + + g_object_unref (column); +} + void gtk_column_view_measure_across (GtkColumnView *self, int *minimum, |