diff options
author | Carlos Garcia Campos <carlosgc@gnome.org> | 2007-12-14 11:12:20 (GMT) |
---|---|---|
committer | Carlos Garcia Campos <carlosgc@src.gnome.org> | 2007-12-14 11:12:20 (GMT) |
commit | a73a364ed185d1d933bd032debd1e37d31a1426b (patch) | |
tree | 62c2fea24899d535b7f682df64f4c1fcec14ea9a /shell | |
parent | 062ea778bb9f36ea5ab0d2756330a61ebfdb10fa (diff) |
Do not change left, top and zoom values when they are null in PDF
2007-12-14 Carlos Garcia Campos <carlosgc@gnome.org>
* backend/pdf/ev-poppler.cc: (ev_link_dest_from_dest):
* libdocument/ev-link-dest.[ch]: (ev_link_dest_get_top),
(ev_link_dest_get_left), (ev_link_dest_get_zoom),
(ev_link_dest_get_property), (ev_link_dest_set_property),
(ev_link_dest_class_init), (ev_link_dest_new_xyz),
(ev_link_dest_new_fith), (ev_link_dest_new_fitv),
(ev_link_dest_new_fitr):
* shell/ev-view.c: (goto_fitr_dest), (goto_fitv_dest),
(goto_fith_dest), (goto_xyz_dest):
Do not change left, top and zoom values when they are null in PDF
destinations. Fixes bug #460658.
svn path=/trunk/; revision=2769
Diffstat (limited to 'shell')
-rw-r--r-- | shell/ev-view.c | 55 |
1 files changed, 36 insertions, 19 deletions
diff --git a/shell/ev-view.c b/shell/ev-view.c index b1ec056..a6007c9 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -1154,21 +1154,26 @@ static void goto_fitr_dest (EvView *view, EvLinkDest *dest) { EvPoint doc_point; - double zoom; + gdouble zoom, left, top; + gboolean change_left, change_top; + + left = ev_link_dest_get_left (dest, &change_left); + top = ev_link_dest_get_top (dest, &change_top); - zoom = zoom_for_size_best_fit (ev_link_dest_get_right (dest) - ev_link_dest_get_left (dest), - ev_link_dest_get_bottom (dest) - ev_link_dest_get_top (dest), + zoom = zoom_for_size_best_fit (ev_link_dest_get_right (dest) - left, + ev_link_dest_get_bottom (dest) - top, ev_view_get_width (view), ev_view_get_height (view), 0, 0); ev_view_set_sizing_mode (view, EV_SIZING_FREE); ev_view_set_zoom (view, zoom, FALSE); - doc_point.x = ev_link_dest_get_left (dest); - doc_point.y = ev_link_dest_get_top (dest); + doc_point.x = change_left ? left : 0; + doc_point.y = change_top ? top : 0; view->current_page = ev_link_dest_get_page (dest); - view->pending_point = doc_point; + if (change_left || change_top) + view->pending_point = doc_point; view->pending_scroll = SCROLL_TO_PAGE_POSITION; gtk_widget_queue_resize (GTK_WIDGET (view)); @@ -1179,12 +1184,14 @@ goto_fitv_dest (EvView *view, EvLinkDest *dest) { EvPoint doc_point; int doc_width, doc_height, page; - double zoom; + double zoom, left; + gboolean change_left; page = ev_link_dest_get_page (dest); ev_page_cache_get_size (view->page_cache, page, 0, 1.0, &doc_width, &doc_height); - doc_point.x = ev_link_dest_get_left (dest); + left = ev_link_dest_get_left (dest, &change_left); + doc_point.x = change_left ? left : 0; doc_point.y = 0; zoom = zoom_for_size_fit_height (doc_width - doc_point.x , doc_height, @@ -1195,7 +1202,8 @@ goto_fitv_dest (EvView *view, EvLinkDest *dest) ev_view_set_zoom (view, zoom, FALSE); view->current_page = page; - view->pending_point = doc_point; + if (change_left) + view->pending_point = doc_point; view->pending_scroll = SCROLL_TO_PAGE_POSITION; gtk_widget_queue_resize (GTK_WIDGET (view)); @@ -1206,15 +1214,18 @@ goto_fith_dest (EvView *view, EvLinkDest *dest) { EvPoint doc_point; int doc_width, doc_height, page; - double zoom; + gdouble zoom, top; + gboolean change_top; page = ev_link_dest_get_page (dest); ev_page_cache_get_size (view->page_cache, page, 0, 1.0, &doc_width, &doc_height); + top = ev_link_dest_get_top (dest, &change_top); + doc_point.x = 0; - doc_point.y = ev_link_dest_get_top (dest); + doc_point.y = change_top ? top : 0; - zoom = zoom_for_size_fit_width (doc_width, ev_link_dest_get_top (dest), + zoom = zoom_for_size_fit_width (doc_width, top, ev_view_get_width (view), ev_view_get_height (view), 0); @@ -1222,7 +1233,8 @@ goto_fith_dest (EvView *view, EvLinkDest *dest) ev_view_set_zoom (view, zoom, FALSE); view->current_page = page; - view->pending_point = doc_point; + if (change_top) + view->pending_point = doc_point; view->pending_scroll = SCROLL_TO_PAGE_POSITION; gtk_widget_queue_resize (GTK_WIDGET (view)); @@ -1255,21 +1267,26 @@ goto_xyz_dest (EvView *view, EvLinkDest *dest) { EvPoint doc_point; gint page; - double zoom; + gdouble zoom, left, top; + gboolean change_zoom, change_left, change_top; - zoom = ev_link_dest_get_zoom (dest); + zoom = ev_link_dest_get_zoom (dest, &change_zoom); page = ev_link_dest_get_page (dest); - if (zoom > 1) { + if (change_zoom && zoom > 1) { ev_view_set_sizing_mode (view, EV_SIZING_FREE); ev_view_set_zoom (view, zoom, FALSE); } - doc_point.x = ev_link_dest_get_left (dest); - doc_point.y = ev_link_dest_get_top (dest); + left = ev_link_dest_get_left (dest, &change_left); + top = ev_link_dest_get_top (dest, &change_top); + + doc_point.x = change_left ? left : 0; + doc_point.y = change_top ? top : 0; view->current_page = page; - view->pending_point = doc_point; + if (change_left || change_top) + view->pending_point = doc_point; view->pending_scroll = SCROLL_TO_PAGE_POSITION; gtk_widget_queue_resize (GTK_WIDGET (view)); |