+ int page;
+ int pages;
+
+ pages = ev_document_get_n_pages (view->document);
+ page = CLAMP (new_page, 1, pages);
+
+ if (view->document) {
+ int old_page = ev_document_get_page (view->document);
+ int old_width, old_height;
+
+ ev_document_get_page_size (view->document,
+ -1,
+ &old_width, &old_height);
+
+ if (old_page != page) {
+ if (view->cursor != EV_VIEW_CURSOR_HIDDEN) {
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_WAIT);
+ }
+ ev_document_set_page (view->document, page);
+ }
+
+ if (old_page != ev_document_get_page (view->document)) {
+ int width, height;
+
+ g_signal_emit (view, page_changed_signal, 0);
+
+ view->has_selection = FALSE;
+ ev_document_get_page_size (view->document,
+ -1,
+ &width, &height);
+ if (width != old_width || height != old_height)
+ gtk_widget_queue_resize (GTK_WIDGET (view));
+
+ gtk_adjustment_set_value (view->vadjustment,
+ view->vadjustment->lower);
+ }
+
+ if (EV_IS_DOCUMENT_FIND (view->document)) {
+ view->find_page = page;
+ view->find_result = 0;
+ update_find_status_message (view);
+ }
+ }
+}
+
+#define MARGIN 5
+
+static void
+ensure_rectangle_is_visible (EvView *view, GdkRectangle *rect)
+{
+ GtkWidget *widget = GTK_WIDGET (view);
+ GtkAdjustment *adjustment;
+ int value;
+
+ adjustment = view->vadjustment;
+
+ if (rect->y < adjustment->value) {
+ value = MAX (adjustment->lower, rect->y - MARGIN);
+ gtk_adjustment_set_value (view->vadjustment, value);
+ } else if (rect->y + rect->height >
+ adjustment->value + widget->allocation.height) {
+ value = MIN (adjustment->upper, rect->y + rect->height -
+ widget->allocation.height + MARGIN);
+ gtk_adjustment_set_value (view->vadjustment, value);
+ }
+
+ adjustment = view->hadjustment;
+
+ if (rect->x < adjustment->value) {
+ value = MAX (adjustment->lower, rect->x - MARGIN);
+ gtk_adjustment_set_value (view->hadjustment, value);
+ } else if (rect->x + rect->height >
+ adjustment->value + widget->allocation.width) {
+ value = MIN (adjustment->upper, rect->x + rect->width -
+ widget->allocation.width + MARGIN);
+ gtk_adjustment_set_value (view->hadjustment, value);
+ }