diff options
author | Nickolay V. Shmyrev <nshmyrev@src.gnome.org> | 2005-04-23 21:49:12 (GMT) |
---|---|---|
committer | Nickolay V. Shmyrev <nshmyrev@src.gnome.org> | 2005-04-23 21:49:12 (GMT) |
commit | 143fa3ca281c0e28f72532f12581992746224857 (patch) | |
tree | 3dfb9c0d0f8c5a1771e4206b45ed57dedab8ba87 | |
parent | 4e8b4b4da36dd24ed5d3a19918dfcfdcc9840fac (diff) |
Fix crash on exit and scrolling to page
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | shell/ev-view.c | 42 |
2 files changed, 40 insertions, 9 deletions
@@ -1,3 +1,10 @@ +2005-04-24 Nickolay V. Shmyrev <nshmyrev@yandex.ru> + + * shell/ev-view.c: (view_update_range_and_current_page), + (page_changed_cb): + + Fix crash on exit and scrolling to page in continuous view. + Sat Apr 23 13:13:04 2005 Jonathan Blandford <jrb@redhat.com> * TODO: diff --git a/shell/ev-view.c b/shell/ev-view.c index 663c3bf..07a71ea 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -233,16 +233,27 @@ view_update_range_and_current_page (EvView *view) GdkRectangle current_area, unused, page_area; gboolean found = FALSE; int i; - - current_area.x = view->hadjustment->value; - current_area.width = view->hadjustment->page_size; - current_area.y = view->vadjustment->value; - current_area.height = view->vadjustment->page_size; - + get_bounding_box_size (view, &(page_area.width), &(page_area.height)); page_area.x = view->spacing; page_area.y = view->spacing; + if (view->hadjustment) { + current_area.x = view->hadjustment->value; + current_area.width = view->hadjustment->page_size; + } else { + current_area.x = page_area.x; + current_area.width = page_area.width; + } + + if (view->vadjustment) { + current_area.y = view->vadjustment->value; + current_area.height = view->vadjustment->page_size; + } else { + current_area.y = page_area.y; + current_area.height = page_area.height; + } + for (i = 0; i < ev_page_cache_get_n_pages (view->page_cache); i++) { if (gdk_rectangle_intersect (¤t_area, &page_area, &unused)) { if (! found) { @@ -1872,6 +1883,7 @@ page_changed_cb (EvPageCache *page_cache, int old_page = view->current_page; int old_width, old_height; int new_width, new_height; + int max_height, n_rows; if (old_page == new_page) return; @@ -1895,9 +1907,21 @@ page_changed_cb (EvPageCache *page_cache, gtk_widget_queue_resize (GTK_WIDGET (view)); else gtk_widget_queue_draw (GTK_WIDGET (view)); - - gtk_adjustment_set_value (view->vadjustment, - view->vadjustment->lower); + + if (view->continuous) { + + n_rows = view->dual_page ? new_page / 2 : new_page; + + get_bounding_box_size (view, NULL, &max_height); + + gtk_adjustment_clamp_page(view->vadjustment, + (max_height + view->spacing) * n_rows, + (max_height + view->spacing) * n_rows + + view->vadjustment->page_size); + } else { + gtk_adjustment_set_value (view->vadjustment, + view->vadjustment->lower); + } if (EV_IS_DOCUMENT_FIND (view->document)) { view->find_page = new_page; |