Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorNickolay V. Shmyrev <nshmyrev@yandex.ru>2006-10-08 18:23:39 (GMT)
committer Nickolay V. Shmyrev <nshmyrev@src.gnome.org>2006-10-08 18:23:39 (GMT)
commit4eb491b96085b0a32dae91c973e803276a31d078 (patch)
tree97a337d9891a4ae351ae10e9efd0cbbefabc0eec /shell
parent02ccbcd90f0e2a1317ad55723180d718f7ec63cd (diff)
Fixes bug #343199, current page now follows find page.
2006-10-08 Nickolay V. Shmyrev <nshmyrev@yandex.ru> * 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.
Diffstat (limited to 'shell')
-rw-r--r--shell/ev-view-private.h1
-rw-r--r--shell/ev-view.c17
2 files changed, 10 insertions, 8 deletions
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);
}