+/* Helper function: move the pager to the last visible position in the buffer,
+ and return the distance between the pager and the end of the buffer in buffer
+ coordinates */
+static gint
+move_pager_and_get_scroll_distance(GtkTextView *textview)
+{
+ GdkRectangle pagerpos, endpos, visiblerect;
+ GtkTextIter oldpager, newpager, end;
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer(textview);
+ GtkTextMark *pager = gtk_text_buffer_get_mark(buffer, "pager_position");
+
+ /* Get an iter at the lower right corner of the visible part of the buffer */
+ gtk_text_view_get_visible_rect(textview, &visiblerect);
+ gtk_text_view_get_iter_at_location(textview, &newpager, visiblerect.x + visiblerect.width, visiblerect.y + visiblerect.height);
+ gtk_text_buffer_get_iter_at_mark(buffer, &oldpager, pager);
+
+#ifdef PAGE_ONLY_UNSEEN
+ if(gtk_text_iter_compare(&oldpager, &newpager) < 0)
+ gtk_text_buffer_move_mark(buffer, pager, &newpager);
+#else
+ gtk_text_buffer_move_mark(buffer, pager, &newpager);
+#endif
+
+ /* Get the buffer coordinates of the pager and the end iter */
+ gtk_text_buffer_get_end_iter(buffer, &end);
+ gtk_text_buffer_get_iter_at_mark(buffer, &newpager, pager);
+ gtk_text_view_get_iter_location(textview, &newpager, &pagerpos);
+ gtk_text_view_get_iter_location(textview, &end, &endpos);
+
+ //g_printerr("View height = %d\n", visiblerect.height);
+ //g_printerr("End - Pager = %d\n", endpos.y - pagerpos.y);
+
+ return endpos.y - pagerpos.y;
+}
+
+/* Helper function: turn on paging for this textview */
+static void
+start_paging(GtkTextView *textview)
+{
+ currently_paging = TRUE;
+ g_signal_handler_unblock(textview, expose_handler);
+ g_signal_handler_unblock(textview, pager_handler);
+}
+
+/* Helper function: turn off paging for this textview */
+static void
+stop_paging(GtkTextView *textview)
+{
+ currently_paging = FALSE;
+ g_signal_handler_block(textview, expose_handler);
+ g_signal_handler_block(textview, pager_handler);
+}
+
+/* Update the pager position after new text is inserted in the buffer */