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>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
parent852da00ccf884031152a3bbea06c32ab7a257cf6 (diff)
Update current page while scrolling in continuous mode
CVSr ----------------------------------------------------------------------
Diffstat (limited to 'shell')
-rw-r--r--shell/ev-page-action.c1
-rw-r--r--shell/ev-view.c17
-rw-r--r--shell/ev-window.c7
3 files changed, 22 insertions, 3 deletions
diff --git a/shell/ev-page-action.c b/shell/ev-page-action.c
index 18415a3..e378d30 100644
--- a/shell/ev-page-action.c
+++ b/shell/ev-page-action.c
@@ -415,6 +415,7 @@ ev_page_action_dispose (GObject *object)
EvPageAction *page = EV_PAGE_ACTION (object);
if (page->priv->page_cache) {
+ g_signal_handlers_disconnect_matched (page->priv->page_cache, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, page_changed_cb, NULL);
g_object_unref (page->priv->page_cache);
page->priv->page_cache = NULL;
}
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 ***/
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 9f18753..ad2e19a 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -1996,11 +1996,16 @@ ev_window_dispose (GObject *object)
priv->action_group = NULL;
}
+ if (priv->page_cache) {
+ g_signal_handlers_disconnect_by_func (priv->page_cache, page_changed_cb, window);
+ priv->page_cache = NULL;
+ }
+
if (priv->document) {
g_object_unref (priv->document);
priv->document = NULL;
}
-
+
if (priv->view) {
g_object_unref (priv->view);
priv->view = NULL;