]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-view.c
Take all pages in consideration, not just current one
[evince.git] / shell / ev-view.c
index 6fb577fce3a6e4910482bcc2bbbc222e0c3bcece..78266944ac9ad6d47292a989e6d3ffa7203ea704 100644 (file)
@@ -689,10 +689,10 @@ ev_view_binding_activated (EvView *view,
        if (view->presentation) {
                switch (scroll) {
                        case GTK_SCROLL_STEP_BACKWARD:
-                               ev_page_cache_prev_page (view->page_cache);
+                               ev_view_previous_page (view);
                                break;
                        case GTK_SCROLL_STEP_FORWARD:
-                               ev_page_cache_next_page (view->page_cache);
+                               ev_view_next_page (view);
                                break;
                        default:
                                break;
@@ -3007,15 +3007,19 @@ jump_to_find_page (EvView *view, EvViewFindDirection direction)
 gboolean
 ev_view_can_find_next (EvView *view)
 {
-       int n_results = 0;
-
        if (EV_IS_DOCUMENT_FIND (view->document)) {
                EvDocumentFind *find = EV_DOCUMENT_FIND (view->document);
+               int i, n_pages;
 
-               n_results = ev_document_find_get_n_results (find, view->current_page);
+               n_pages = ev_page_cache_get_n_pages (view->page_cache);
+               for (i = 0; i < n_pages; i++) {
+                       if (ev_document_find_get_n_results (find, i) > 0) {
+                               return TRUE;
+                       }
+               }
        }
 
-       return n_results > 0;
+       return FALSE;
 }
 
 void
@@ -3569,6 +3573,42 @@ ev_view_show_cursor (EvView *view)
        ev_view_set_cursor (view, EV_VIEW_CURSOR_NORMAL);
 }
 
+gboolean
+ev_view_next_page (EvView *view)
+{
+       int page;
+
+       g_return_val_if_fail (EV_IS_VIEW (view), FALSE);
+
+       page = ev_page_cache_get_current_page (view->page_cache);
+       page = ev_view_get_dual_page (view) ? page + 2 : page + 1;
+
+       if (page < ev_page_cache_get_n_pages (view->page_cache)) {
+               ev_page_cache_set_current_page (view->page_cache, page);
+               return TRUE;
+       } else {
+               return FALSE;
+       }
+}
+
+gboolean
+ev_view_previous_page (EvView *view)
+{
+       int page;
+
+       g_return_val_if_fail (EV_IS_VIEW (view), FALSE);
+
+       page = ev_page_cache_get_current_page (view->page_cache);
+       page = ev_view_get_dual_page (view) ? page - 2 : page - 1;
+
+       if (page >= 0) {
+               ev_page_cache_set_current_page (view->page_cache, page);
+               return TRUE;
+       } else {
+               return FALSE;
+       }
+}
+
 /*** Enum description for usage in signal ***/
 
 GType
@@ -3586,4 +3626,3 @@ ev_sizing_mode_get_type (void)
   }
   return etype;
 }
-