From 4eb491b96085b0a32dae91c973e803276a31d078 Mon Sep 17 00:00:00 2001 From: Nickolay V. Shmyrev Date: Sun, 08 Oct 2006 18:23:39 +0000 Subject: Fixes bug #343199, current page now follows find page. 2006-10-08 Nickolay V. Shmyrev * shell/ev-view-private.h: * shell/ev-view.c: (view_set_adjustment_values), (view_update_range_and_current_page), (ensure_rectangle_is_visible), (ev_view_size_allocate): Fixes bug #343199, current page now follows find page. --- diff --git a/ChangeLog b/ChangeLog index 4d3510a..db495ea 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2006-10-08 Nickolay V. Shmyrev + + * shell/ev-view-private.h: + * shell/ev-view.c: (view_set_adjustment_values), + (view_update_range_and_current_page), + (ensure_rectangle_is_visible), (ev_view_size_allocate): + + Fixes bug #343199, current page now follows find page. + 2006-10-08 Wouter Bolsterlee * backend/ev-document-factory.c: diff --git a/shell/ev-view-private.h b/shell/ev-view-private.h index a53fe54..791256b 100644 --- a/shell/ev-view-private.h +++ b/shell/ev-view-private.h @@ -45,6 +45,7 @@ typedef enum { SCROLL_TO_KEEP_POSITION, SCROLL_TO_PAGE_POSITION, SCROLL_TO_CENTER, + SCROLL_TO_FIND_LOCATION, } PendingScroll; typedef enum { diff --git a/shell/ev-view.c b/shell/ev-view.c index b27ab2c..4a2161b 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -386,6 +386,7 @@ view_set_adjustment_values (EvView *view, factor = 1.0; switch (view->pending_scroll) { case SCROLL_TO_KEEP_POSITION: + case SCROLL_TO_FIND_LOCATION: factor = (adjustment->value) / adjustment->upper; break; case SCROLL_TO_PAGE_POSITION: @@ -406,6 +407,7 @@ view_set_adjustment_values (EvView *view, */ switch (view->pending_scroll) { case SCROLL_TO_KEEP_POSITION: + case SCROLL_TO_FIND_LOCATION: new_value = CLAMP (adjustment->upper * factor + 0.5, 0, adjustment->upper - adjustment->page_size); gtk_adjustment_set_value (adjustment, (int)new_value); break; @@ -428,9 +430,6 @@ view_update_range_and_current_page (EvView *view) gint current_page; gint best_current_page = -1; - if (view->pending_scroll != SCROLL_TO_KEEP_POSITION) - return; - /* Presentation trumps all other modes */ if (view->presentation) { view->start_page = view->current_page; @@ -496,7 +495,7 @@ view_update_range_and_current_page (EvView *view) best_current_page = MAX (best_current_page, view->start_page); current_page = ev_page_cache_get_current_page (view->page_cache); - if (current_page != best_current_page) { + if ((current_page != best_current_page) && (view->pending_scroll == SCROLL_TO_KEEP_POSITION)) { view->current_page = best_current_page; ev_page_cache_set_current_page (view->page_cache, best_current_page); } @@ -667,7 +666,7 @@ ensure_rectangle_is_visible (EvView *view, GdkRectangle *rect) GtkAdjustment *adjustment; int value; - view->pending_scroll = SCROLL_TO_KEEP_POSITION; + view->pending_scroll = SCROLL_TO_FIND_LOCATION; adjustment = view->vadjustment; @@ -692,6 +691,8 @@ ensure_rectangle_is_visible (EvView *view, GdkRectangle *rect) widget->allocation.width + MARGIN); gtk_adjustment_set_value (view->hadjustment, value); } + + gtk_widget_queue_resize (GTK_WIDGET (view)); } /*** Geometry computations ***/ @@ -1610,12 +1611,12 @@ ev_view_size_allocate (GtkWidget *widget, view_set_adjustment_values (view, GTK_ORIENTATION_HORIZONTAL); view_set_adjustment_values (view, GTK_ORIENTATION_VERTICAL); - view->pending_scroll = SCROLL_TO_KEEP_POSITION; - view->pending_resize = FALSE; - if (view->document) view_update_range_and_current_page (view); + view->pending_scroll = SCROLL_TO_KEEP_POSITION; + view->pending_resize = FALSE; + GTK_WIDGET_CLASS (ev_view_parent_class)->size_allocate (widget, allocation); } -- cgit v0.9.1