From 0891a0dee72709c9af4d67229fc9b8cdb8a9b39b Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 21 May 2023 08:57:34 -0400 Subject: [PATCH] gridview: Add a section helper --- gtk/gtkgridview.c | 30 ++++++++++++++++++++++++++++++ gtk/gtkgridviewprivate.h | 5 +++++ 2 files changed, 35 insertions(+) diff --git a/gtk/gtkgridview.c b/gtk/gtkgridview.c index 1ee5343615..8a8a90aaf3 100644 --- a/gtk/gtkgridview.c +++ b/gtk/gtkgridview.c @@ -30,6 +30,7 @@ #include "gtkmultiselection.h" #include "gtktypebuiltins.h" #include "gtkwidgetprivate.h" +#include "gtksectionmodel.h" /* Maximum number of list items created by the gridview. * For debugging, you can set this to G_MAXUINT to ensure @@ -428,6 +429,35 @@ gtk_grid_view_get_allocation (GtkListBase *base, return TRUE; } +/* Returns the section that position falls into + */ +void +gtk_grid_view_get_section_for_position (GtkListItemManager *items, + unsigned int position, + unsigned int *section_start, + unsigned int *section_end) +{ + GListModel *model; + unsigned int start, end; + + model = G_LIST_MODEL (gtk_list_item_manager_get_model (items)); + + if (!gtk_list_item_manager_get_has_sections (items)) + { + start = 0; + end = g_list_model_get_n_items (model); + } + else + { + gtk_section_model_get_section (GTK_SECTION_MODEL (model), position, &start, &end); + } + + if (section_start) + *section_start = start; + if (section_end) + *section_end = end; +} + /* Returns the column that the given item will fall in. */ unsigned int diff --git a/gtk/gtkgridviewprivate.h b/gtk/gtkgridviewprivate.h index 4a5ca903d3..14f07d2ab2 100644 --- a/gtk/gtkgridviewprivate.h +++ b/gtk/gtkgridviewprivate.h @@ -25,6 +25,11 @@ G_BEGIN_DECLS +void gtk_grid_view_get_section_for_position (GtkListItemManager *items, + unsigned int position, + unsigned int *start, + unsigned int *end); + unsigned int gtk_grid_view_get_column_for_position (GtkListItemManager *items, unsigned int n_columns, unsigned int position);