+/** @brief Identify first and last visible paths
+ *
+ * We'd like to use gtk_tree_view_get_visible_range() for this, but that was
+ * introduced in GTK+ 2.8, and Fink only has 2.6 (which is around three years
+ * out of date at time of writing), and I'm not yet prepared to rule out Fink
+ * support.
+ */
+static gboolean choose_get_visible_range(GtkTreeView *tree_view,
+ GtkTreePath **startpathp,
+ GtkTreePath **endpathp) {
+ GdkRectangle visible_tc[1];
+
+ /* Get the visible rectangle in tree coordinates */
+ gtk_tree_view_get_visible_rect(tree_view, visible_tc);
+ /*fprintf(stderr, "visible: %dx%x at %dx%d\n",
+ visible_tc->width, visible_tc->height,
+ visible_tc->x, visible_tc->y);*/
+ if(startpathp) {
+ /* Convert top-left visible point to widget coordinates */
+ int x_wc, y_wc;
+ gtk_tree_view_tree_to_widget_coords(tree_view,
+ visible_tc->x, visible_tc->y,
+ &x_wc, &y_wc);
+ //fprintf(stderr, " start widget coords: %dx%d\n", x_wc, y_wc);
+ gtk_tree_view_get_path_at_pos(tree_view,
+ x_wc, y_wc,
+ startpathp,
+ NULL,
+ NULL, NULL);
+ }
+ if(endpathp) {
+ /* Convert bottom-left visible point to widget coordinates */
+ /* Convert top-left visible point to widget coordinates */
+ int x_wc, y_wc;
+ gtk_tree_view_tree_to_widget_coords(tree_view,
+ visible_tc->x,
+ visible_tc->y + visible_tc->height - 1,
+ &x_wc, &y_wc);
+ //fprintf(stderr, " end widget coords: %dx%d\n", x_wc, y_wc);
+ gtk_tree_view_get_path_at_pos(tree_view,
+ x_wc, y_wc,
+ endpathp,
+ NULL,
+ NULL, NULL);
+ }
+ return TRUE;
+}
+