From ed650322792514d69ae54eef4cb105cac1dcb4b8 Mon Sep 17 00:00:00 2001 From: Oz Tiram <oz.tiram@gmail.com> Date: Fri, 7 Feb 2020 21:57:10 +0100 Subject: [PATCH 1/5] Make synctex optional Not everyone who reads PDF's is necessarily a LaTeX user. These changes allow users to install atril without the huge bagage of tex-live on systems where synctex isn't provided as a stand alone library. --- configure.ac | 25 +++++++++++++++++-------- libdocument/ev-document.c | 16 ++++++++++++---- libview/ev-view.c | 9 ++++++++- shell/ev-window.c | 5 +++++ 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/configure.ac b/configure.ac index 6fee0ff6e..e7a63feed 100644 --- a/configure.ac +++ b/configure.ac @@ -361,15 +361,25 @@ AC_SUBST([GIRTYPELIBDIR]) AM_CONDITIONAL([ENABLE_INTROSPECTION],[test "$enable_introspection" = "yes"]) dnl ================== libsynctex =========================================== +AC_ARG_ENABLE([synctex], + [AS_HELP_STRING([--disable-synctex], [Disable support for synctex])], + [], + [enable_synctex=yes]) -PKG_CHECK_MODULES(SYNCTEX, [synctex >= $SYNCTEX_REQUIRED], has_synctex=yes, has_synctex=no) -dnl not found? use internal code copy. -if test "x$has_synctex" = "xno"; then - AC_MSG_ERROR("SyncTeX support is disabled since library version $SYNCTEX_REQUIRED or newer not found") +if test "$enable_synctex" = "yes"; then + AC_DEFINE([ENABLE_SYNCTEX],[1],[Define if synctex support is enabled]) + PKG_CHECK_MODULES(SYNCTEX, [synctex >= $SYNCTEX_REQUIRED], has_synctex=yes, has_synctex=no) + dnl not found? use internal code copy. + if test "x$has_synctex" = "xno"; then + AC_MSG_ERROR("SyncTeX support is disabled since library version $SYNCTEX_REQUIRED or newer not found") + fi + AC_SUBST(SYNCTEX_LIBS) + AC_SUBST(SYNCTEX_CFLAGS) fi -AC_SUBST(SYNCTEX_LIBS) -AC_SUBST(SYNCTEX_CFLAGS) + +AM_CONDITIONAL([ENABLE_SYNCTEX], [test "$enable_synctex" = "yes"]) + dnl ================== portability checks =========================================== @@ -776,6 +786,7 @@ Configure summary: Tests...............: $enable_tests PDF Backend.........: $enable_pdf + Synctex enabled.....: $enable_synctex PostScript Backend..: $enable_ps TIFF Backend........: $enable_tiff DJVU Backend........: $enable_djvu @@ -784,6 +795,4 @@ Configure summary: Comics Backend......: $enable_comics XPS Backend.........: $enable_xps ePub Backend........: $have_webkit - - SyncTeX.............: $has_synctex " diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c index b713a6717..be082aebb 100644 --- a/libdocument/ev-document.c +++ b/libdocument/ev-document.c @@ -25,7 +25,9 @@ #include <string.h> #include "ev-document.h" +#ifdef ENABLE_SYNCTEX #include "synctex_parser.h" +#endif #include "ev-file-helpers.h" typedef struct _EvPageSize @@ -53,8 +55,9 @@ struct _EvDocumentPrivate gchar **page_labels; EvPageSize *page_sizes; EvDocumentInfo *info; - +#ifdef ENABLE_SYNCTEX synctex_scanner_p synctex_scanner; +#endif }; static gint _ev_document_get_n_pages (EvDocument *document); @@ -124,12 +127,12 @@ ev_document_finalize (GObject *object) ev_document_info_free (document->priv->info); document->priv->info = NULL; } - +#ifdef ENABLE_SYNCTEX if (document->priv->synctex_scanner) { synctex_scanner_free (document->priv->synctex_scanner); document->priv->synctex_scanner = NULL; } - +#endif G_OBJECT_CLASS (ev_document_parent_class)->finalize (object); } @@ -137,8 +140,9 @@ static void ev_document_init (EvDocument *document) { document->priv = ev_document_get_instance_private (document); +#ifdef ENABLE_SYNCTEX document->synctex_version = SYNCTEX_VERSION_STRING; - +#endif /* Assume all pages are the same size until proven otherwise */ document->priv->uniform = TRUE; /* Assume that the document is not a web document*/ @@ -336,6 +340,7 @@ ev_document_load (EvDocument *document, } priv->info = _ev_document_get_info (document); +#ifdef ENABLE_SYNCTEX if (_ev_document_support_synctex (document)) { gchar *filename; @@ -346,6 +351,7 @@ ev_document_load (EvDocument *document, g_free (filename); } } +#endif } return retval; @@ -388,6 +394,7 @@ _ev_document_support_synctex (EvDocument *document) return klass->support_synctex ? klass->support_synctex (document) : FALSE; } +#ifdef ENABLE_SYNCTEX gboolean ev_document_has_synctex (EvDocument *document) { @@ -492,6 +499,7 @@ ev_document_synctex_forward_search (EvDocument *document, return result; } +#endif /* ENABLE_SYNCTEX */ static gint _ev_document_get_n_pages (EvDocument *document) diff --git a/libview/ev-view.c b/libview/ev-view.c index a195ba21f..e98582d34 100644 --- a/libview/ev-view.c +++ b/libview/ev-view.c @@ -3210,6 +3210,7 @@ ev_view_remove_annotation (EvView *view, g_object_unref (annot); } +#ifdef ENABLE_SYNCTEX static gboolean ev_view_synctex_backward_search (EvView *view, gdouble x, @@ -3235,6 +3236,7 @@ ev_view_synctex_backward_search (EvView *view, return FALSE; } +#endif /* Caret navigation */ #define CURSOR_ON_MULTIPLIER 2 @@ -4078,8 +4080,10 @@ ev_view_draw (GtkWidget *widget, show_annotation_windows (view, i); if (page_ready && view->focused_element) draw_focus (view, cr, i, &clip_rect); +#ifdef ENABLE_SYNCTEX if (page_ready && view->synctex_result) highlight_forward_search_results (view, cr, i); +#endif } if (GTK_WIDGET_CLASS (ev_view_parent_class)->draw) @@ -4472,9 +4476,10 @@ ev_view_button_press_event (GtkWidget *widget, EvFormField *field; EvMapping *link; gint page; - +#ifdef ENABLE_SYNCTEX if (event->state & GDK_CONTROL_MASK) return ev_view_synctex_backward_search (view, event->x , event->y); +#endif if (EV_IS_SELECTION (view->document) && view->selection_info.selections) { if (event->type == GDK_3BUTTON_PRESS) { @@ -7522,6 +7527,7 @@ ev_view_find_cancel (EvView *view) view->find_pages = NULL; } +#ifdef ENABLE_SYNCTEX /*** Synctex ***/ void ev_view_highlight_forward_search (EvView *view, @@ -7549,6 +7555,7 @@ ev_view_highlight_forward_search (EvView *view, ensure_rectangle_is_visible (view, &view_rect); gtk_widget_queue_draw (GTK_WIDGET (view)); } +#endif /* ENABLE_SYNCTEX */ /*** Selections ***/ static gboolean diff --git a/shell/ev-window.c b/shell/ev-window.c index e2dfbf727..bffc9a7f9 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -7736,6 +7736,8 @@ ev_window_emit_doc_loaded (EvWindow *window) ev_atril_window_emit_document_loaded (window->priv->skeleton, window->priv->uri); } + +#ifdef ENABLE_SYNCTEX static gboolean handle_sync_view_cb (EvAtrilWindow *object, GDBusMethodInvocation *invocation, @@ -7756,6 +7758,7 @@ handle_sync_view_cb (EvAtrilWindow *object, return TRUE; } +#endif #endif /* ENABLE_DBUS */ static gboolean @@ -7816,9 +7819,11 @@ ev_window_init (EvWindow *ev_window) ev_window->priv->dbus_object_path, &error)) { ev_window->priv->skeleton = skeleton; +#ifdef ENABLE_SYNCTEX g_signal_connect (skeleton, "handle-sync-view", G_CALLBACK (handle_sync_view_cb), ev_window); +#endif } else { g_printerr ("Failed to register bus object %s: %s\n", ev_window->priv->dbus_object_path, error->message); From c141d2c6ae0b4ce5824817f9aa2f98d5edbf7756 Mon Sep 17 00:00:00 2001 From: Oz N Tiram <oz.tiram@gmail.com> Date: Thu, 11 Jun 2020 09:15:28 +0200 Subject: [PATCH 2/5] Fix -Wunused-function warnings caused by --enable-synctex=no --- libdocument/ev-document.c | 5 ++++- libview/ev-view-private.h | 3 ++- libview/ev-view.c | 10 ++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c index be082aebb..f7c878956 100644 --- a/libdocument/ev-document.c +++ b/libdocument/ev-document.c @@ -68,7 +68,9 @@ static void _ev_document_get_page_size (EvDocument *document, static gchar *_ev_document_get_page_label (EvDocument *document, EvPage *page); static EvDocumentInfo *_ev_document_get_info (EvDocument *document); +#ifdef ENABLE_SYNCTEX static gboolean _ev_document_support_synctex (EvDocument *document); +#endif static GMutex ev_doc_mutex; static GMutex ev_fc_mutex; @@ -386,6 +388,8 @@ ev_document_get_page (EvDocument *document, return klass->get_page (document, index); } + +#ifdef ENABLE_SYNCTEX static gboolean _ev_document_support_synctex (EvDocument *document) { @@ -394,7 +398,6 @@ _ev_document_support_synctex (EvDocument *document) return klass->support_synctex ? klass->support_synctex (document) : FALSE; } -#ifdef ENABLE_SYNCTEX gboolean ev_document_has_synctex (EvDocument *document) { diff --git a/libview/ev-view-private.h b/libview/ev-view-private.h index f10593953..4f6179e4a 100644 --- a/libview/ev-view-private.h +++ b/libview/ev-view-private.h @@ -125,8 +125,9 @@ struct _EvView { GList **find_pages; gint find_result; gboolean jump_to_find_result; +#ifdef ENABLE_SYNCTEX gboolean highlight_find_results; - +#endif EvDocumentModel *model; EvPixbufCache *pixbuf_cache; gsize pixbuf_cache_size; diff --git a/libview/ev-view.c b/libview/ev-view.c index e98582d34..7c9281cef 100644 --- a/libview/ev-view.c +++ b/libview/ev-view.c @@ -177,12 +177,14 @@ static void ev_view_remove_all (EvView static AtkObject *ev_view_get_accessible (GtkWidget *widget); /*** Drawing ***/ +#if ENABLE_SYNCTEX static void highlight_find_results (EvView *view, cairo_t *cr, int page); static void highlight_forward_search_results (EvView *view, cairo_t *cr, int page); +#endif static void draw_one_page (EvView *view, gint page, cairo_t *cr, @@ -4074,8 +4076,10 @@ ev_view_draw (GtkWidget *widget, if (page_ready && should_draw_caret_cursor (view, i)) draw_caret_cursor (view, cr); +#ifdef ENABLE_SYNCTEX if (page_ready && view->find_pages && view->highlight_find_results) highlight_find_results (view, cr, i); +#endif if (page_ready && EV_IS_DOCUMENT_ANNOTATIONS (view->document)) show_annotation_windows (view, i); if (page_ready && view->focused_element) @@ -5654,6 +5658,7 @@ draw_rubberband (EvView *view, } +#ifdef ENABLE_SYNCTEX static void highlight_find_results (EvView *view, cairo_t *cr, int page) { @@ -5698,6 +5703,7 @@ highlight_forward_search_results (EvView *view, cairo_t *cr, int page) cairo_stroke (cr); cairo_restore (cr); } +#endif static void draw_surface (cairo_t *cr, @@ -6497,7 +6503,9 @@ ev_view_init (EvView *view) view->page_layout = EV_PAGE_LAYOUT_SINGLE; view->pending_scroll = SCROLL_TO_KEEP_POSITION; view->jump_to_find_result = TRUE; +#ifdef ENABLE_SYNCTEX view->highlight_find_results = FALSE; +#endif view->caret_enabled = FALSE; view->cursor_page = 0; view->zoom_center_x = -1; @@ -7517,7 +7525,9 @@ ev_view_find_search_changed (EvView *view) void ev_view_find_set_highlight_search (EvView *view, gboolean value) { +#ifdef ENABLE_SYNCTEX view->highlight_find_results = value; +#endif gtk_widget_queue_draw (GTK_WIDGET (view)); } From f0054e7011c5cf6ac814ce1c6b42ce1713b25dba Mon Sep 17 00:00:00 2001 From: Oz N Tiram <oz.tiram@gmail.com> Date: Thu, 11 Jun 2020 10:21:00 +0200 Subject: [PATCH 3/5] Improved detection of --enable/disable synctex option --- configure.ac | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index e7a63feed..ee33f27d9 100644 --- a/configure.ac +++ b/configure.ac @@ -362,9 +362,12 @@ AM_CONDITIONAL([ENABLE_INTROSPECTION],[test "$enable_introspection" = "yes"]) dnl ================== libsynctex =========================================== AC_ARG_ENABLE([synctex], - [AS_HELP_STRING([--disable-synctex], [Disable support for synctex])], - [], - [enable_synctex=yes]) + [--enable-synctex enable support for synctex)], + [case "${enableval}" in + yes) synctex=true ;; + no) synctex=false;; + *) AC_MSG_ERROR([bad value ${enableval} for --enable-synctex]) ;; + esac],[enable_synctex=yes]) if test "$enable_synctex" = "yes"; then From 37d80d4c862cbd03525fe4393f09b92d1dff8f56 Mon Sep 17 00:00:00 2001 From: Oz N Tiram <oz.tiram@gmail.com> Date: Thu, 11 Jun 2020 10:23:15 +0200 Subject: [PATCH 4/5] Use ENABLE_SYNCTEX in libdocument/Makefile.am --- libdocument/Makefile.am | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libdocument/Makefile.am b/libdocument/Makefile.am index f527f0a4a..d1db419c0 100644 --- a/libdocument/Makefile.am +++ b/libdocument/Makefile.am @@ -102,11 +102,14 @@ libatrildocument_la_CPPFLAGS = \ libatrildocument_la_CFLAGS = \ $(LIBDOCUMENT_CFLAGS) \ - $(SYNCTEX_CFLAGS) \ $(WARN_CFLAGS) \ $(DISABLE_DEPRECATED) \ $(AM_CFLAGS) +if ENABLE_SYNCTEX +libatrildocument_la_CFLAGS += $(SYNCTEX_CFLAGS) +endif + libatrildocument_la_LDFLAGS = \ -version-info $(EV_DOCUMENT_LT_VERSION_INFO) \ -no-undefined \ @@ -116,9 +119,11 @@ libatrildocument_la_LDFLAGS = \ libatrildocument_la_LIBADD = \ $(LIBDOCUMENT_LIBS) \ $(GMODULE_LIBS) \ - $(SYNCTEX_LIBS) \ $(ZLIB_LIBS) +if ENABLE_SYNCTEX +libatrildocument_la_LIBADD += $(SYNCTEX_LIBS) +endif BUILT_SOURCES = \ ev-document-type-builtins.c \ From 87c8ee575d3ec50a278c5e428d066341ffd3295d Mon Sep 17 00:00:00 2001 From: Oz N Tiram <oz.tiram@gmail.com> Date: Sun, 14 Jun 2020 17:09:56 +0200 Subject: [PATCH 5/5] Re-enable highlight_find_results --- libview/ev-view-private.h | 2 -- libview/ev-view.c | 9 +++------ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/libview/ev-view-private.h b/libview/ev-view-private.h index 4f6179e4a..e95157234 100644 --- a/libview/ev-view-private.h +++ b/libview/ev-view-private.h @@ -125,9 +125,7 @@ struct _EvView { GList **find_pages; gint find_result; gboolean jump_to_find_result; -#ifdef ENABLE_SYNCTEX gboolean highlight_find_results; -#endif EvDocumentModel *model; EvPixbufCache *pixbuf_cache; gsize pixbuf_cache_size; diff --git a/libview/ev-view.c b/libview/ev-view.c index 7c9281cef..29b06fbef 100644 --- a/libview/ev-view.c +++ b/libview/ev-view.c @@ -177,10 +177,10 @@ static void ev_view_remove_all (EvView static AtkObject *ev_view_get_accessible (GtkWidget *widget); /*** Drawing ***/ -#if ENABLE_SYNCTEX static void highlight_find_results (EvView *view, cairo_t *cr, int page); +#if ENABLE_SYNCTEX static void highlight_forward_search_results (EvView *view, cairo_t *cr, int page); @@ -4076,10 +4076,8 @@ ev_view_draw (GtkWidget *widget, if (page_ready && should_draw_caret_cursor (view, i)) draw_caret_cursor (view, cr); -#ifdef ENABLE_SYNCTEX if (page_ready && view->find_pages && view->highlight_find_results) highlight_find_results (view, cr, i); -#endif if (page_ready && EV_IS_DOCUMENT_ANNOTATIONS (view->document)) show_annotation_windows (view, i); if (page_ready && view->focused_element) @@ -5627,6 +5625,7 @@ ev_view_style_updated (GtkWidget *widget) /*** Drawing ***/ + static void draw_rubberband (EvView *view, cairo_t *cr, @@ -5658,7 +5657,6 @@ draw_rubberband (EvView *view, } -#ifdef ENABLE_SYNCTEX static void highlight_find_results (EvView *view, cairo_t *cr, int page) { @@ -5683,6 +5681,7 @@ highlight_find_results (EvView *view, cairo_t *cr, int page) } } +#ifdef ENABLE_SYNCTEX static void highlight_forward_search_results (EvView *view, cairo_t *cr, int page) { @@ -7525,9 +7524,7 @@ ev_view_find_search_changed (EvView *view) void ev_view_find_set_highlight_search (EvView *view, gboolean value) { -#ifdef ENABLE_SYNCTEX view->highlight_find_results = value; -#endif gtk_widget_queue_draw (GTK_WIDGET (view)); }