From 40279e8affe79ddc7d0be2c4f8016db6cd45b73e Mon Sep 17 00:00:00 2001
From: Marko Lindqvist <cazfi74@gmail.com>
Date: Tue, 15 Oct 2024 00:31:47 +0300
Subject: [PATCH 35/35] gtk4x: Add get_column_view_row()

See RM #964

Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
---
 client/gui-gtk-5.0/gui_stuff.c | 28 ++++++++++++++++++++++++++++
 client/gui-gtk-5.0/gui_stuff.h |  2 ++
 2 files changed, 30 insertions(+)

diff --git a/client/gui-gtk-5.0/gui_stuff.c b/client/gui-gtk-5.0/gui_stuff.c
index 8adad3797e..77ae4f0a05 100644
--- a/client/gui-gtk-5.0/gui_stuff.c
+++ b/client/gui-gtk-5.0/gui_stuff.c
@@ -1175,3 +1175,31 @@ void alert_close_response(GObject *dialog, GAsyncResult *result,
 {
   gtk_alert_dialog_choose_finish(GTK_ALERT_DIALOG(dialog), result, NULL);
 }
+
+/**********************************************************************//**
+  Get GtkColumnView row at given y coordinate
+**************************************************************************/
+int get_column_view_row(GtkWidget *cview, int y)
+{
+  GtkWidget *child = gtk_widget_get_first_child(gtk_widget_get_next_sibling(gtk_widget_get_first_child(cview)));
+  int row_number = -1; /* 0 after header */
+  int curr_y = 0;
+
+  while (GTK_IS_WIDGET(child)) {
+    GtkAllocation alloc;
+
+    gtk_widget_get_allocation(child, &alloc);
+
+    curr_y = alloc.height + alloc.y;
+
+    if (curr_y > y) {
+      return row_number;
+    }
+
+    row_number++;
+
+    child = gtk_widget_get_next_sibling(child);
+  }
+
+  return -1;
+}
diff --git a/client/gui-gtk-5.0/gui_stuff.h b/client/gui-gtk-5.0/gui_stuff.h
index f4072040e8..b6b47c11d9 100644
--- a/client/gui-gtk-5.0/gui_stuff.h
+++ b/client/gui-gtk-5.0/gui_stuff.h
@@ -172,4 +172,6 @@ void alert_close_response(GObject *dialog, GAsyncResult *result,
   g_object_unref(_submenu_var);                    \
 }
 
+int get_column_view_row(GtkWidget *cview, int y);
+
 #endif /* FC__GUI_STUFF_H */
-- 
2.45.2

