There are some APIs in GTK3 for interactive:
GtkWidget* gtk_grid_get_child_at (GtkGrid* grid, gint left, gint top);
GtkFlowBoxChild* gtk_flow_box_get_child_at_pos (GtkFlowBox* box, gint x, gint y);
GtkFlowBoxChild* gtk_flow_box_get_child_at_index (GtkFlowBox* box, gint idx);
gboolean gtk_tree_view_get_dest_row_at_pos (
GtkTreeView* tree_view,
gint drag_x,
gint drag_y,
GtkTreePath** path,
GtkTreeViewDropPosition* pos
);
gboolean
gtk_tree_view_get_path_at_pos (
GtkTreeView* tree_view,
gint x,
gint y,
GtkTreePath** path,
GtkTreeViewColumn** column,
gint* cell_x,
gint* cell_y
);
for compatibility, I think GTK4 need these APIs too:
GtkWidget* gtk_list_base_get_child_at_pointer (GtkListBase *self);
GtkWidget* gtk_list_base_get_child_at_position (GtkListBase *self, gint left, gint top);
GtkWidget* gtk_list_base_get_children_at_rect (GtkListBase* self, gint left, gint top, gint right, gint bottom);
GtkWidget* gtk_list_view_get_child_at_pointer (GtkListView* self);
GtkWidget* gtk_list_view_get_child_at_position (GtkListView* self, gint left, gint top);
GtkWidget* gtk_list_view_get_children_at_rect (GtkListView* self, gint left, gint top, gint right, gint bottom);
GtkWidget* gtk_column_view_get_row_at_pointer (GtkColumnView* self);
GtkWidget* gtk_column_view_get_row_at_position (GtkColumnView* self, gint left, gint top);
GtkWidget* gtk_column_view_get_rows_at_rect (GtkColumnView* self, gint left, gint top, gint right, gint bottom);
GtkWidget* gtk_column_view_get_cell_at_pointer (GtkColumnView* self);
GtkWidget* gtk_column_view_get_cell_at_position (GtkColumnView* self, gint left, gint top);
GtkWidget* gtk_column_view_get_cells_at_rect (GtkColumnView* self, gint left, gint top, gint right, gint bottom);
GtkWidget* gtk_grid_view_get_child_at_pointer (GtkGridView* self);
GtkWidget* gtk_grid_view_get_child_at_position (GtkGridView* self, gint left, gint top);
GtkWidget* gtk_grid_view_get_children_at_rect (GtkGridView* self, gint left, gint top, gint right, gint bottom);
GtkWidget* gtk_tree_view_get_row_at_pointer (GtkTreeView* self);
GtkWidget* gtk_tree_view_get_row_at_position (GtkTreeView* self, gint left, gint top);
GtkWidget* gtk_tree_view_get_rows_at_rect (GtkTreeView* self, gint left, gint top, gint right, gint bottom);
GtkWidget* gtk_tree_view_get_cell_at_pointer (GtkTreeView* self);
GtkWidget* gtk_tree_view_get_cell_at_position (GtkTreeView* self, gint left, gint top);
GtkWidget* gtk_tree_view_get_cells_at_rect (GtkTreeView* self, gint left, gint top, gint right, gint bottom);