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@src.gnome.org>2006-04-29 12:20:26 (GMT)
committer Nickolay V. Shmyrev <nshmyrev@src.gnome.org>2006-04-29 12:20:26 (GMT)
commit7dca53f0824e2e24079a000289120c55540272ed (patch)
tree5ea9f4c3db47cbbc1f6f60c51775ec7d71e1a6b3 /shell
parent6b0baad9910e782e9a1be407869e39b4086dc58f (diff)
Fix for the bug #312573 – Optimal selection of current page among
* shell/ev-view.c: (view_update_range_and_current_page), (ev_view_scroll): Fix for the bug #312573 – Optimal selection of current page among visible pages.
Diffstat (limited to 'shell')
-rw-r--r--shell/ev-view.c53
1 files changed, 30 insertions, 23 deletions
diff --git a/shell/ev-view.c b/shell/ev-view.c
index eb8f329..9925d5a 100644
--- a/shell/ev-view.c
+++ b/shell/ev-view.c
@@ -424,6 +424,7 @@ static void
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;
@@ -436,6 +437,7 @@ view_update_range_and_current_page (EvView *view)
GdkRectangle current_area, unused, page_area;
GtkBorder border;
gboolean found = FALSE;
+ gint area_max, area;
int i;
if (!(view->vadjustment && view->hadjustment))
@@ -451,44 +453,50 @@ view_update_range_and_current_page (EvView *view)
get_page_extents (view, i, &page_area, &border);
if (gdk_rectangle_intersect (&current_area, &page_area, &unused)) {
- if (! found) {
+ area = unused.width * unused.height;
+
+ if (!found) {
+ area_max = area;
view->start_page = i;
found = TRUE;
-
+ best_current_page = i;
+ }
+ if (area > area_max) {
+ best_current_page = (area == area_max) ? MIN (i, best_current_page) : i;
+ area_max = area;
}
+
view->end_page = i;
} else if (found) {
break;
}
}
- } else {
- if (view->dual_page) {
- if (view->current_page % 2 == ev_page_cache_get_dual_even_left (view->page_cache)) {
- view->start_page = view->current_page;
- if (view->current_page + 1 < ev_page_cache_get_n_pages (view->page_cache))
- view->end_page = view->start_page + 1;
- else
- view->end_page = view->start_page;
- } else {
- if (view->current_page < 1)
- view->start_page = view->current_page;
- else
- view->start_page = view->current_page - 1;
- view->end_page = view->current_page;
- }
- } else {
+ } else if (view->dual_page) {
+ if (view->current_page % 2 == ev_page_cache_get_dual_even_left (view->page_cache)) {
view->start_page = view->current_page;
+ if (view->current_page + 1 < ev_page_cache_get_n_pages (view->page_cache))
+ view->end_page = view->start_page + 1;
+ else
+ view->end_page = view->start_page;
+ } else {
+ if (view->current_page < 1)
+ view->start_page = view->current_page;
+ else
+ view->start_page = view->current_page - 1;
view->end_page = view->current_page;
}
-
+ } else {
+ view->start_page = view->current_page;
+ view->end_page = view->current_page;
}
+ best_current_page = MAX (best_current_page, view->start_page);
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);
+ if (current_page != best_current_page) {
+ view->current_page = best_current_page;
+ ev_page_cache_set_current_page (view->page_cache, best_current_page);
}
ev_pixbuf_cache_set_page_range (view->pixbuf_cache,
@@ -646,7 +654,6 @@ ev_view_scroll (EvView *view,
adjustment->upper - adjustment->page_size);
gtk_adjustment_set_value (adjustment, value);
-
}
#define MARGIN 5