Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/ev-view.c
diff options
context:
space:
mode:
authorNickolay V. Shmyrev <nshmyrev@src.gnome.org>2005-04-27 22:58:24 (GMT)
committer Nickolay V. Shmyrev <nshmyrev@src.gnome.org>2005-04-27 22:58:24 (GMT)
commita154e22c19e8c654971c4fc06ddf106c30f47f87 (patch)
treee0fcd7020a83b4a031ea12ae2bd39a60501710ba /shell/ev-view.c
parent852da00ccf884031152a3bbea06c32ab7a257cf6 (diff)
Update current page while scrolling in continuous mode
CVSr ----------------------------------------------------------------------
Diffstat (limited to 'shell/ev-view.c')
-rw-r--r--shell/ev-view.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/shell/ev-view.c b/shell/ev-view.c
index 98374db..cf00d82 100644
--- a/shell/ev-view.c
+++ b/shell/ev-view.c
@@ -151,6 +151,10 @@ static void get_bounding_box_size (EvView *view,
int *max_height);
static void view_update_range_and_current_page (EvView *view);
+static void page_changed_cb (EvPageCache *page_cache,
+ int new_page,
+ EvView *view);
+
G_DEFINE_TYPE (EvView, ev_view, GTK_TYPE_WIDGET)
@@ -224,13 +228,13 @@ view_set_adjustment_values (EvView *view,
static void
view_update_range_and_current_page (EvView *view)
{
-
/* Presentation trumps all other modes */
if (view->presentation) {
view->start_page = view->current_page;
view->end_page = view->current_page;
} else if (view->continuous) {
GdkRectangle current_area, unused, page_area;
+ gint current_page;
gboolean found = FALSE;
int i;
@@ -259,6 +263,7 @@ view_update_range_and_current_page (EvView *view)
if (! found) {
view->start_page = i;
found = TRUE;
+
}
view->end_page = i;
} else if (found) {
@@ -275,6 +280,14 @@ view_update_range_and_current_page (EvView *view)
page_area.y += page_area.height + view->spacing;
}
}
+
+ current_page = ev_page_cache_get_current_page (view->page_cache);
+
+ if (current_page < view->start_page || current_page > view->end_page) {
+ g_signal_handlers_block_by_func (view->page_cache, page_changed_cb, view);
+ ev_page_cache_set_current_page (view->page_cache, view->start_page);
+ g_signal_handlers_unblock_by_func (view->page_cache, page_changed_cb, view);
+ }
} else {
if (view->dual_page) {
if (view->current_page % 2 == 0) {
@@ -294,7 +307,7 @@ view_update_range_and_current_page (EvView *view)
ev_pixbuf_cache_set_page_range (view->pixbuf_cache,
view->start_page,
view->end_page,
- view->scale);
+ view->scale);
}
/*** Virtual function implementations ***/