]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-view.c
Fix for the bug #334854, page down and page up switch pages in
[evince.git] / shell / ev-view.c
index 7e77f2e0e438a45afcc5b2c641144f57464e9a12..8ac8aa7bbbcf093cfa06771c3ff808d67869f460 100644 (file)
@@ -471,7 +471,7 @@ view_update_range_and_current_page (EvView *view)
                                else 
                                        view->end_page = view->start_page;
                        } else {
-                               if (view->current_page - 1 < 0)
+                               if (view->current_page < 1)
                                        view->start_page = view->current_page;
                                else
                                        view->start_page = view->current_page - 1;
@@ -487,6 +487,7 @@ view_update_range_and_current_page (EvView *view)
        current_page = ev_page_cache_get_current_page (view->page_cache);
 
        if (current_page < view->start_page || current_page > view->end_page) {
+               view->current_page = view->start_page;
                ev_page_cache_set_current_page (view->page_cache, view->start_page);
        }
 
@@ -573,9 +574,11 @@ ev_view_scroll (EvView        *view,
 
        if (view->presentation) {
                switch (scroll) {
+                       case EV_SCROLL_PAGE_BACKWARD:
                        case EV_SCROLL_STEP_BACKWARD:
                                ev_view_previous_page (view);
                                break;
+                       case EV_SCROLL_PAGE_FORWARD:
                        case EV_SCROLL_STEP_FORWARD:
                                ev_view_next_page (view);
                                break;
@@ -2123,11 +2126,14 @@ draw_one_page (EvView          *view,
        GdkRectangle overlap;
        GdkRectangle real_page_area;
        EvViewSelection *selection;
+       gint current_page;
 
        g_assert (view->document);
+       
        if (! gdk_rectangle_intersect (page_area, expose_area, &overlap))
                return;
-
+       
+       current_page = ev_page_cache_get_current_page (view->page_cache);
        selection = find_selection_for_page (view, page);
        ev_page_cache_get_size (view->page_cache,
                                page, view->rotation,
@@ -2143,7 +2149,8 @@ draw_one_page (EvView          *view,
 
        ev_document_misc_paint_one_page (GTK_WIDGET(view)->window,
                                         GTK_WIDGET (view),
-                                        page_area, border);
+                                        page_area, border, 
+                                        page == current_page);
 
        if (gdk_rectangle_intersect (&real_page_area, expose_area, &overlap)) {
                GdkPixbuf *selection_pixbuf = NULL;
@@ -2608,15 +2615,16 @@ page_changed_cb (EvPageCache *page_cache,
                 EvView      *view)
 {
        if (view->current_page != new_page) {
-
                view->current_page = new_page;
                view->pending_scroll = SCROLL_TO_PAGE_POSITION;
                gtk_widget_queue_resize (GTK_WIDGET (view));
+       } else {
+               gtk_widget_queue_draw (GTK_WIDGET (view));
+       }
 
-               if (EV_IS_DOCUMENT_FIND (view->document)) {
-                       view->find_result = 0;
-                       update_find_status_message (view, TRUE);
-               }
+       if (EV_IS_DOCUMENT_FIND (view->document)) {
+               view->find_result = 0;
+               update_find_status_message (view, TRUE);
        }
 }
 
@@ -3958,7 +3966,11 @@ ev_view_next_page (EvView *view)
        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 (view->dual_page && !view->presentation)
+               page = page + 2; 
+       else 
+               page = page + 1;
 
        if (page < ev_page_cache_get_n_pages (view->page_cache)) {
                ev_page_cache_set_current_page (view->page_cache, page);
@@ -3979,7 +3991,11 @@ ev_view_previous_page (EvView *view)
        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 (view->dual_page && !view->presentation)
+               page = page - 2; 
+       else 
+               page = page - 1;
 
        if (page >= 0) {
                ev_page_cache_set_current_page (view->page_cache, page);