summaryrefslogtreecommitdiff
path: root/libview
diff options
context:
space:
mode:
authorEduard Beutel <[email protected]>2014-08-30 22:05:30 +0200
committerVictor Kareh <[email protected]>2026-06-25 10:20:54 -0400
commit1a5c28010afd483f7d30261744e80b15e29481ba (patch)
tree35f18c9deb264aad67b5e9c826f57272d1e62b38 /libview
parente531227809082a3799340e4718b041e458492f98 (diff)
downloadatril-master.tar.bz2
atril-master.tar.xz
Add allow-links-change-zoom settingHEADmaster
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.h1
-rw-r--r--libview/ev-view.c91
-rw-r--r--libview/ev-view.h4
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,