- EvView *view = EV_VIEW (data);
-
- g_array_set_size (view->find_results, 0);
-
- if (n_results > 0)
- g_array_append_vals (view->find_results,
- results, n_results);
-
-#if 0
- {
- int i;
-
- g_printerr ("%d results %d%%: ", n_results,
- (int) (percent_complete * 100));
- i = 0;
- while (i < n_results) {
- g_printerr ("%d ", results[i].page_num);
- ++i;
- }
- g_printerr ("\n");
- }
-#endif
-
- view->find_percent_complete = percent_complete;
- update_find_results (view);
-
- gtk_widget_queue_draw (GTK_WIDGET (view));
+ GdkRectangle rect;
+
+ ev_document_find_get_result (EV_DOCUMENT_FIND (view->document),
+ view->find_result, &rect);
+ ensure_rectangle_is_visible (view, &rect);
+}
+
+static void
+jump_to_find_page (EvView *view)
+{
+ int n_pages, i;
+
+ n_pages = ev_document_get_n_pages (view->document);
+
+ for (i = 0; i <= n_pages; i++) {
+ int has_results;
+ int page;
+
+ page = i + view->find_page;
+ if (page > n_pages) {
+ page = page - n_pages;
+ }
+
+ has_results = ev_document_find_page_has_results
+ (EV_DOCUMENT_FIND (view->document), page);
+ if (has_results == -1) {
+ view->find_page = page;
+ break;
+ } else if (has_results == 1) {
+ set_document_page (view, page);
+ jump_to_find_result (view);
+ break;
+ }
+ }
+}
+
+static void
+find_changed_cb (EvDocument *document, int page, EvView *view)
+{
+ jump_to_find_page (view);
+ jump_to_find_result (view);
+ update_find_status_message (view);
+
+ if (ev_document_get_page (document) == page) {
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+ }