diff options
| author | Eduard Beutel <[email protected]> | 2014-08-30 22:05:30 +0200 |
|---|---|---|
| committer | Victor Kareh <[email protected]> | 2026-06-25 10:20:54 -0400 |
| commit | 1a5c28010afd483f7d30261744e80b15e29481ba (patch) | |
| tree | 35f18c9deb264aad67b5e9c826f57272d1e62b38 /libview | |
| parent | e531227809082a3799340e4718b041e458492f98 (diff) | |
| download | atril-master.tar.bz2 atril-master.tar.xz | |
When enabled links are not allowed to change the current zoom mode and
level.
Fixes #712
Backported from https://gitlab.gnome.org/GNOME/evince/-/commit/5d8ef0fa
Diffstat (limited to 'libview')
| -rw-r--r-- | libview/ev-view-private.h | 1 | ||||
| -rw-r--r-- | libview/ev-view.c | 91 | ||||
| -rw-r--r-- | libview/ev-view.h | 4 |
3 files changed, 72 insertions, 24 deletions
diff --git a/libview/ev-view-private.h b/libview/ev-view-private.h index 98891965..75ce4f9e 100644 --- a/libview/ev-view-private.h +++ b/libview/ev-view-private.h @@ -174,6 +174,7 @@ struct _EvView { EvPageLayout page_layout; GtkWidget *loading_window; guint loading_timeout; + gboolean allow_links_change_zoom; /* Common for button press handling */ int pressed_button; diff --git a/libview/ev-view.c b/libview/ev-view.c index 8eecf1b7..e84c3ffd 100644 --- a/libview/ev-view.c +++ b/libview/ev-view.c @@ -1764,6 +1764,24 @@ goto_xyz_dest (EvView *view, EvLinkDest *dest) } static void +goto_y_dest (EvView *view, EvLinkDest *dest) +{ + gboolean change_top; + EvPoint doc_point; + gdouble top; + int page; + + page = ev_link_dest_get_page (dest); + top = ev_link_dest_get_top (dest, &change_top); + + doc_point.x = 0; + doc_point.y = change_top ? top : 0; + view->pending_point = doc_point; + + ev_view_change_page (view, page); +} + +static void goto_dest (EvView *view, EvLinkDest *dest) { EvLinkDestType type; @@ -1779,30 +1797,38 @@ goto_dest (EvView *view, EvLinkDest *dest) type = ev_link_dest_get_dest_type (dest); - switch (type) { - case EV_LINK_DEST_TYPE_PAGE: - ev_document_model_set_page (view->model, page); - break; - case EV_LINK_DEST_TYPE_FIT: - goto_fit_dest (view, dest); - break; - case EV_LINK_DEST_TYPE_FITH: - goto_fith_dest (view, dest); - break; - case EV_LINK_DEST_TYPE_FITV: - goto_fitv_dest (view, dest); - break; - case EV_LINK_DEST_TYPE_FITR: - goto_fitr_dest (view, dest); - break; - case EV_LINK_DEST_TYPE_XYZ: - goto_xyz_dest (view, dest); - break; - case EV_LINK_DEST_TYPE_PAGE_LABEL: - ev_document_model_set_page_by_label (view->model, ev_link_dest_get_page_label (dest)); - break; - default: - g_assert_not_reached (); + if (view->allow_links_change_zoom == FALSE && + view->sizing_mode == EV_SIZING_FIT_PAGE && + view->continuous == FALSE) { + ev_document_model_set_page (view->model, page); + } else if (view->allow_links_change_zoom == FALSE) { + goto_y_dest (view, dest); + } else { + switch (type) { + case EV_LINK_DEST_TYPE_PAGE: + ev_document_model_set_page (view->model, page); + break; + case EV_LINK_DEST_TYPE_FIT: + goto_fit_dest (view, dest); + break; + case EV_LINK_DEST_TYPE_FITH: + goto_fith_dest (view, dest); + break; + case EV_LINK_DEST_TYPE_FITV: + goto_fitv_dest (view, dest); + break; + case EV_LINK_DEST_TYPE_FITR: + goto_fitr_dest (view, dest); + break; + case EV_LINK_DEST_TYPE_XYZ: + goto_xyz_dest (view, dest); + break; + case EV_LINK_DEST_TYPE_PAGE_LABEL: + ev_document_model_set_page_by_label (view->model, ev_link_dest_get_page_label (dest)); + break; + default: + g_assert_not_reached (); + } } if (current_page != view->current_page) @@ -6525,6 +6551,7 @@ ev_view_init (EvView *view) #ifdef ENABLE_SYNCTEX view->highlight_find_results = FALSE; #endif + view->allow_links_change_zoom = TRUE; view->caret_enabled = FALSE; view->cursor_page = 0; view->zoom_center_x = -1; @@ -8285,3 +8312,19 @@ ev_view_disconnect_handlers(EvView *view) G_CALLBACK (ev_view_document_changed_cb), view); } + +void +ev_view_set_allow_links_change_zoom (EvView *view, gboolean allowed) +{ + g_return_if_fail (EV_IS_VIEW (view)); + + view->allow_links_change_zoom = allowed; +} + +gboolean +ev_view_get_allow_links_change_zoom (EvView *view) +{ + g_return_val_if_fail (EV_IS_VIEW (view), FALSE); + + return view->allow_links_change_zoom; +} diff --git a/libview/ev-view.h b/libview/ev-view.h index ce455a53..5380176f 100644 --- a/libview/ev-view.h +++ b/libview/ev-view.h @@ -53,6 +53,10 @@ void ev_view_reload (EvView *view); void ev_view_set_page_cache_size (EvView *view, gsize cache_size); +void ev_view_set_allow_links_change_zoom (EvView *view, + gboolean allowed); +gboolean ev_view_get_allow_links_change_zoom (EvView *view); + /* Clipboard */ void ev_view_copy (EvView *view); void ev_view_copy_link_address (EvView *view, |
