[gnome-builder/wip/gtk4-port] libide/gtk: add listview movement helpers



commit b926c47116d983e156c33ff96df60dd136f516c2
Author: Christian Hergert <chergert redhat com>
Date:   Fri May 13 08:14:14 2022 -0700

    libide/gtk: add listview movement helpers

 src/libide/gtk/ide-gtk.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 src/libide/gtk/ide-gtk.h |  4 ++++
 2 files changed, 50 insertions(+)
---
diff --git a/src/libide/gtk/ide-gtk.c b/src/libide/gtk/ide-gtk.c
index 5c7039ea7..5f8447ff6 100644
--- a/src/libide/gtk/ide-gtk.c
+++ b/src/libide/gtk/ide-gtk.c
@@ -466,3 +466,49 @@ ide_g_date_time_format_for_display (GDateTime *self)
 
   return g_strdup_printf (ngettext ("About %u year ago", "About %u years ago", years), years);
 }
+
+void
+ide_gtk_list_view_move_next (GtkListView *view)
+{
+  GtkSelectionModel *model;
+  GtkBitset *bitset;
+  guint pos = 0;
+
+  g_return_if_fail (GTK_IS_LIST_VIEW (view));
+
+  if (!(model = gtk_list_view_get_model (view)))
+    return;
+
+  bitset = gtk_selection_model_get_selection (model);
+  if (!gtk_bitset_is_empty (bitset))
+    pos = gtk_bitset_get_minimum (bitset) + 1;
+
+  if (pos < g_list_model_get_n_items (G_LIST_MODEL (model)))
+    {
+      gtk_selection_model_select_item (model, pos, TRUE);
+      gtk_widget_activate_action (GTK_WIDGET (view), "list.scroll-to-item", "u", pos);
+    }
+}
+
+void
+ide_gtk_list_view_move_previous (GtkListView *view)
+{
+  GtkSelectionModel *model;
+  GtkBitset *bitset;
+  guint pos = 0;
+
+  g_return_if_fail (GTK_IS_LIST_VIEW (view));
+
+  if (!(model = gtk_list_view_get_model (view)))
+    return;
+
+  bitset = gtk_selection_model_get_selection (model);
+  if (!gtk_bitset_is_empty (bitset))
+    pos = gtk_bitset_get_minimum (bitset);
+
+  if (pos > 0)
+    {
+      gtk_selection_model_select_item (model, pos-1, TRUE);
+      gtk_widget_activate_action (GTK_WIDGET (view), "list.scroll-to-item", "u", pos-1);
+    }
+}
diff --git a/src/libide/gtk/ide-gtk.h b/src/libide/gtk/ide-gtk.h
index e2a6b8d0a..bdc6a44c7 100644
--- a/src/libide/gtk/ide-gtk.h
+++ b/src/libide/gtk/ide-gtk.h
@@ -59,5 +59,9 @@ IDE_AVAILABLE_IN_ALL
 char      *ide_g_time_span_to_label           (GTimeSpan          span);
 IDE_AVAILABLE_IN_ALL
 char      *ide_g_date_time_format_for_display (GDateTime         *self);
+IDE_AVAILABLE_IN_ALL
+void       ide_gtk_list_view_move_next        (GtkListView       *view);
+IDE_AVAILABLE_IN_ALL
+void       ide_gtk_list_view_move_previous    (GtkListView       *view);
 
 G_END_DECLS


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]