diff --git a/NEWS b/NEWS index dd89bac1..f42e50b0 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,15 @@ +1.10.3 +------ + * dvi: fix crash due to regression + * Retrieve strings directly from gschema + +1.10.2 +------ + * Fix several command line options + * Fix several findbar issues + * Make libmatedesktop optional + * [pdf] Fix saving annotations added to different pages + 1.10.1 ------ diff --git a/backend/dvi/dvi-document.c b/backend/dvi/dvi-document.c index 77065361..304283d7 100644 --- a/backend/dvi/dvi-document.c +++ b/backend/dvi/dvi-document.c @@ -177,7 +177,7 @@ dvi_document_render (EvDocument *document, */ g_mutex_lock (&dvi_context_mutex); - mdvi_setpage (&dvi_document->context, rc->page->index); + mdvi_setpage (dvi_document->context, rc->page->index); mdvi_set_shrink (dvi_document->context, (int)((dvi_document->params->hshrink - 1) / rc->scale) + 1, diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc index 0edc83c6..5f34a9b3 100644 --- a/backend/pdf/ev-poppler.cc +++ b/backend/pdf/ev-poppler.cc @@ -1167,6 +1167,9 @@ ev_link_from_action (PdfDocument *pdf_document, } break; + case POPPLER_ACTION_JAVASCRIPT: + unimplemented_action = "POPPLER_ACTION_JAVASCRIPT"; + break; case POPPLER_ACTION_UNKNOWN: unimplemented_action = "POPPLER_ACTION_UNKNOWN"; } @@ -2891,16 +2894,21 @@ pdf_document_annotations_add_annotation (EvDocumentAnnotations *document_annotat if (pdf_document->annots) { mapping_list = (EvMappingList *)g_hash_table_lookup (pdf_document->annots, GINT_TO_POINTER (page->index)); + } else { + pdf_document->annots = g_hash_table_new_full (g_direct_hash, + g_direct_equal, + (GDestroyNotify)NULL, + (GDestroyNotify)ev_mapping_list_unref); + mapping_list = NULL; + } + + if (mapping_list) { list = ev_mapping_list_get_list (mapping_list); name = g_strdup_printf ("annot-%d-%d", page->index, g_list_length (list) + 1); ev_annotation_set_name (annot, name); g_free (name); list = g_list_append (list, annot_mapping); } else { - pdf_document->annots = g_hash_table_new_full (g_direct_hash, - g_direct_equal, - (GDestroyNotify)NULL, - (GDestroyNotify)ev_mapping_list_unref); name = g_strdup_printf ("annot-%d-0", page->index); ev_annotation_set_name (annot, name); g_free (name); diff --git a/configure.ac b/configure.ac index d081c486..3e7ab956 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,7 @@ m4_define([ev_major_version], [1]) m4_define([ev_minor_version], [10]) -m4_define([ev_micro_version], [1]) +m4_define([ev_micro_version], [3]) m4_define([ev_extra_version], []) m4_define([ev_version], [ev_major_version.ev_minor_version.ev_micro_version()ev_extra_version]) @@ -53,9 +53,6 @@ AM_MAINTAINER_MODE([enable]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) - - -AC_ISC_POSIX AC_PROG_CC AM_PROG_CC_C_O AC_PROG_CXX @@ -73,7 +70,7 @@ dnl FIXME: remove this when required gtk+ >= 2.19.7 DISABLE_DEPRECATED= AC_SUBST([DISABLE_DEPRECATED]) -IT_PROG_INTLTOOL([0.35.0]) +IT_PROG_INTLTOOL([0.50.1]) GETTEXT_PACKAGE=atril AC_SUBST(GETTEXT_PACKAGE) @@ -671,7 +668,7 @@ AC_ARG_ENABLE(xps, [enable_xps=yes]) if test "x$enable_xps" = "xyes"; then - GXPS_REQUIRED=0.0.1 + GXPS_REQUIRED=0.2.0 PKG_CHECK_MODULES(GXPS, libgxps >= $GXPS_REQUIRED,enable_xps=yes,enable_xps=no) if test "x$enable_xps" = "xyes"; then @@ -695,6 +692,7 @@ AC_ARG_ENABLE(epub, [enable_epub=$enableval], [enable_epub=yes]) +have_webkit="no" if test "x$enable_epub" = "xyes"; then case "$with_gtk" in 2.0) @@ -717,7 +715,6 @@ esac if test "x$have_webkit" = "xyes"; then AC_DEFINE([ENABLE_EPUB], [1], [Enable support for ePub documents.]) else - have_webkit="no" AC_MSG_WARN(["ePub support is disabled."]) fi fi diff --git a/data/Makefile.am b/data/Makefile.am index fedca7dd..e829efe0 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -58,9 +58,7 @@ appdata_DATA = $(appdata_in_files:.xml.in=.xml) # # GSettings schema # -gsettingsschema_in_files = org.mate.Atril.gschema.xml.in -# gsettings_SCHEMAS is a list of all the schemas you want to install -gsettings_SCHEMAS = $(gsettingsschema_in_files:.xml.in=.xml) +gsettings_SCHEMAS = org.mate.Atril.gschema.xml .PRECIOUS: $(gsettings_SCHEMAS) @@ -99,7 +97,7 @@ EXTRA_DIST = \ $(ui_DATA) \ $(DESKTOP_IN_FILES) \ $(appdata_in_files) \ - $(gsettingsschema_in_files) \ + $(gsettings_SCHEMAS) \ org.mate.atril.Daemon.service.in \ $(man_MANS) \ atril.ico \ @@ -115,7 +113,6 @@ CLEANFILES = \ DISTCLEANFILES = \ $(DESKTOP_FILES) \ - $(gsettings_SCHEMAS) \ $(service_DATA) -include $(top_srcdir)/git.mk diff --git a/data/org.mate.Atril.gschema.xml.in b/data/org.mate.Atril.gschema.xml similarity index 89% rename from data/org.mate.Atril.gschema.xml.in rename to data/org.mate.Atril.gschema.xml index fe7893ea..cd7de5c1 100644 --- a/data/org.mate.Atril.gschema.xml.in +++ b/data/org.mate.Atril.gschema.xml @@ -9,8 +9,8 @@ true - <_summary>Override document restrictions - <_description>Override document restrictions, like restriction to copy or to print. + Override document restrictions + Override document restrictions, like restriction to copy or to print. diff --git a/po/POTFILES.in b/po/POTFILES.in index 2f109ede..d4866eb4 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -24,7 +24,7 @@ cut-n-paste/toolbar-editor/egg-toolbar-editor.c cut-n-paste/zoom-control/ephy-zoom.h data/atril.appdata.xml.in data/atril.desktop.in.in -[type: gettext/gsettings]data/org.mate.Atril.gschema.xml.in +[type: gettext/gsettings]data/org.mate.Atril.gschema.xml previewer/ev-previewer.c previewer/ev-previewer-window.c properties/ev-properties-main.c diff --git a/shell/ev-application.c b/shell/ev-application.c index e2b1ea62..754bb41e 100644 --- a/shell/ev-application.c +++ b/shell/ev-application.c @@ -254,15 +254,20 @@ ev_spawn (const char *uri, g_string_append_printf (cmd, " %s", path); g_free (path); - /* Page label */ + /* Page label or index */ if (dest) { - const gchar *page_label; - - page_label = ev_link_dest_get_page_label (dest); - if (page_label) - g_string_append_printf (cmd, " --page-label=%s", page_label); - else - g_string_append_printf (cmd, " --page-label=%d", ev_link_dest_get_page (dest)); + switch (ev_link_dest_get_dest_type (dest)) { + case EV_LINK_DEST_TYPE_PAGE_LABEL: + g_string_append_printf (cmd, " --page-label=%s", + ev_link_dest_get_page_label (dest)); + break; + case EV_LINK_DEST_TYPE_PAGE: + g_string_append_printf (cmd, " --page-index=%d", + ev_link_dest_get_page (dest) + 1); + break; + default: + break; + } } /* Find string */ @@ -440,10 +445,10 @@ on_register_uri_cb (GObject *source_object, g_variant_get (value, "(&s)", &owner); /* This means that the document wasn't already registered; go - * ahead with opening it. - */ + * ahead with opening it. + */ if (owner[0] == '\0') { - g_variant_unref (value); + g_variant_unref (value); application->doc_registered = TRUE; @@ -456,38 +461,47 @@ on_register_uri_cb (GObject *source_object, data->timestamp); ev_register_doc_data_free (data); - return; - } + return; + } /* Already registered */ g_variant_builder_init (&builder, G_VARIANT_TYPE ("(a{sv}u)")); - g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{sv}")); - g_variant_builder_add (&builder, "{sv}", - "display", - g_variant_new_string (gdk_display_get_name (gdk_screen_get_display (data->screen)))); - g_variant_builder_add (&builder, "{sv}", - "screen", - g_variant_new_int32 (gdk_screen_get_number (data->screen))); + g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{sv}")); + g_variant_builder_add (&builder, "{sv}", + "display", + g_variant_new_string (gdk_display_get_name (gdk_screen_get_display (data->screen)))); + g_variant_builder_add (&builder, "{sv}", + "screen", + g_variant_new_int32 (gdk_screen_get_number (data->screen))); if (data->dest) { - g_variant_builder_add (&builder, "{sv}", - "page-label", - g_variant_new_string (ev_link_dest_get_page_label (data->dest))); + switch (ev_link_dest_get_dest_type (data->dest)) { + case EV_LINK_DEST_TYPE_PAGE_LABEL: + g_variant_builder_add (&builder, "{sv}", "page-label", + g_variant_new_string (ev_link_dest_get_page_label (data->dest))); + break; + case EV_LINK_DEST_TYPE_PAGE: + g_variant_builder_add (&builder, "{sv}", "page-index", + g_variant_new_uint32 (ev_link_dest_get_page (data->dest))); + break; + default: + break; + } } if (data->search_string) { - g_variant_builder_add (&builder, "{sv}", - "find-string", - g_variant_new_string (data->search_string)); + g_variant_builder_add (&builder, "{sv}", + "find-string", + g_variant_new_string (data->search_string)); } if (data->mode != EV_WINDOW_MODE_NORMAL) { - g_variant_builder_add (&builder, "{sv}", - "mode", - g_variant_new_uint32 (data->mode)); + g_variant_builder_add (&builder, "{sv}", + "mode", + g_variant_new_uint32 (data->mode)); } - g_variant_builder_close (&builder); + g_variant_builder_close (&builder); - g_variant_builder_add (&builder, "u", data->timestamp); + g_variant_builder_add (&builder, "u", data->timestamp); - g_dbus_connection_call (connection, + g_dbus_connection_call (connection, owner, APPLICATION_DBUS_OBJECT_PATH, APPLICATION_DBUS_INTERFACE, @@ -776,6 +790,8 @@ method_call_cb (GDBusConnection *connection, mode = g_variant_get_uint32 (value); } else if (strcmp (key, "page-label") == 0 && g_variant_classify (value) == G_VARIANT_CLASS_STRING) { dest = ev_link_dest_new_page_label (g_variant_get_string (value, NULL)); + } else if (strcmp (key, "page-index") == 0 && g_variant_classify (value) == G_VARIANT_CLASS_UINT32) { + dest = ev_link_dest_new_page (g_variant_get_uint32 (value)); } else if (strcmp (key, "find-string") == 0 && g_variant_classify (value) == G_VARIANT_CLASS_STRING) { search_string = g_variant_get_string (value, NULL); } diff --git a/shell/ev-window.c b/shell/ev-window.c index acdfa8aa..5adbf63e 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -1532,10 +1532,21 @@ ev_window_setup_document (EvWindow *ev_window) info = ev_document_get_info (document); update_document_mode (ev_window, info->mode); + + if (EV_IS_DOCUMENT_FIND (document)) { + if (ev_window->priv->search_string && + !EV_WINDOW_IS_PRESENTATION (ev_window)) { + ev_window_cmd_edit_find (NULL, ev_window); + egg_find_bar_set_search_string (EGG_FIND_BAR (ev_window->priv->find_bar), ev_window->priv->search_string); + } + + g_clear_pointer (&ev_window->priv->search_string, g_free); + } + /*FIXME*/ if (EV_WINDOW_IS_PRESENTATION (ev_window) && document->iswebdocument == FALSE) gtk_widget_grab_focus (ev_window->priv->presentation_view); - else { + else if (!gtk_widget_get_visible (ev_window->priv->find_bar)) { if ( document->iswebdocument == FALSE ) gtk_widget_grab_focus (ev_window->priv->view); #if ENABLE_EPUB @@ -1672,7 +1683,7 @@ static void ev_window_handle_link (EvWindow *ev_window, EvLinkDest *dest) { - if (ev_window->priv->document->iswebdocument == FALSE ) { + if (ev_window->priv->document->iswebdocument == TRUE ) { return; } if (dest) { @@ -1749,15 +1760,6 @@ ev_window_load_job_cb (EvJob *job, break; } - if (ev_window->priv->search_string && EV_IS_DOCUMENT_FIND (document)) { - ev_window_cmd_edit_find (NULL, ev_window); - egg_find_bar_set_search_string (EGG_FIND_BAR (ev_window->priv->find_bar), - ev_window->priv->search_string); - } - - g_free (ev_window->priv->search_string); - ev_window->priv->search_string = NULL; - /* Create a monitor for the document */ ev_window->priv->monitor = ev_file_monitor_new (ev_window->priv->uri); g_signal_connect_swapped (ev_window->priv->monitor, "changed", @@ -2285,7 +2287,8 @@ ev_window_open_document (EvWindow *ev_window, break; } - if (search_string && EV_IS_DOCUMENT_FIND (document)) { + if (search_string && EV_IS_DOCUMENT_FIND (document) && + mode != EV_WINDOW_MODE_PRESENTATION) { ev_window_cmd_edit_find (NULL, ev_window); egg_find_bar_set_search_string (EGG_FIND_BAR (ev_window->priv->find_bar), search_string); @@ -3873,12 +3876,13 @@ ev_window_cmd_edit_select_all (GtkAction *action, EvWindow *ev_window) static void ev_window_cmd_edit_find (GtkAction *action, EvWindow *ev_window) { - g_return_if_fail (EV_IS_WINDOW (ev_window)); - if (ev_window->priv->document == NULL || !EV_IS_DOCUMENT_FIND (ev_window->priv->document)) { g_error ("Find action should be insensitive since document doesn't support find"); return; - } + } + + if (EV_WINDOW_IS_PRESENTATION (ev_window)) + return; update_chrome_flag (ev_window, EV_CHROME_FINDBAR, TRUE); update_chrome_visibility (ev_window); @@ -3888,7 +3892,8 @@ ev_window_cmd_edit_find (GtkAction *action, EvWindow *ev_window) static void ev_window_cmd_edit_find_next (GtkAction *action, EvWindow *ev_window) { - g_return_if_fail (EV_IS_WINDOW (ev_window)); + if (EV_WINDOW_IS_PRESENTATION (ev_window)) + return; update_chrome_flag (ev_window, EV_CHROME_FINDBAR, TRUE); update_chrome_visibility (ev_window); @@ -3906,7 +3911,8 @@ ev_window_cmd_edit_find_next (GtkAction *action, EvWindow *ev_window) static void ev_window_cmd_edit_find_previous (GtkAction *action, EvWindow *ev_window) { - g_return_if_fail (EV_IS_WINDOW (ev_window)); + if (EV_WINDOW_IS_PRESENTATION (ev_window)) + return; update_chrome_flag (ev_window, EV_CHROME_FINDBAR, TRUE); update_chrome_visibility (ev_window); @@ -5457,27 +5463,16 @@ find_bar_close_cb (EggFindBar *find_bar, } static void -find_bar_search_changed_cb (EggFindBar *find_bar, - GParamSpec *param, - EvWindow *ev_window) +ev_window_search_start (EvWindow *ev_window) { - gboolean case_sensitive; + EggFindBar *find_bar = EGG_FIND_BAR (ev_window->priv->find_bar); const char *search_string; if (!ev_window->priv->document || !EV_IS_DOCUMENT_FIND (ev_window->priv->document)) return; - /* Either the string or case sensitivity could have changed. */ - case_sensitive = egg_find_bar_get_case_sensitive (find_bar); search_string = egg_find_bar_get_search_string (find_bar); -#if ENABLE_EPUB - if (ev_window->priv->document->iswebdocument) { - ev_web_view_find_search_changed(EV_WEB_VIEW(ev_window->priv->webview)); - } else -#endif - { - ev_view_find_search_changed (EV_VIEW (ev_window->priv->view)); - } + ev_window_clear_find_job (ev_window); if (search_string && search_string[0]) { @@ -5485,7 +5480,7 @@ find_bar_search_changed_cb (EggFindBar *find_bar, ev_document_model_get_page (ev_window->priv->model), ev_document_get_n_pages (ev_window->priv->document), search_string, - case_sensitive); + egg_find_bar_get_case_sensitive (find_bar)); g_signal_connect (ev_window->priv->find_job, "finished", G_CALLBACK (ev_window_find_job_finished_cb), @@ -5496,14 +5491,31 @@ find_bar_search_changed_cb (EggFindBar *find_bar, ev_job_scheduler_push_job (ev_window->priv->find_job, EV_JOB_PRIORITY_NONE); } else { ev_window_update_actions (ev_window); - egg_find_bar_set_status_text (EGG_FIND_BAR (ev_window->priv->find_bar), - NULL); + egg_find_bar_set_status_text (find_bar, NULL); if (ev_window->priv->document->iswebdocument == FALSE) { gtk_widget_queue_draw (GTK_WIDGET (ev_window->priv->view)); } } } +static void +find_bar_search_changed_cb (EggFindBar *find_bar, + GParamSpec *param, + EvWindow *ev_window) +{ + /* Either the string or case sensitivity could have changed. */ +#if ENABLE_EPUB + if (ev_window->priv->document->iswebdocument) { + ev_web_view_find_search_changed(EV_WEB_VIEW (ev_window->priv->webview)); + } else +#endif + { + ev_view_find_search_changed (EV_VIEW (ev_window->priv->view)); + } + + ev_window_search_start (ev_window); +} + static void find_bar_visibility_changed_cb (EggFindBar *find_bar, GParamSpec *param, @@ -5517,7 +5529,6 @@ find_bar_visibility_changed_cb (EggFindBar *find_bar, if (!ev_window->priv->document->iswebdocument) { ev_view_find_set_highlight_search (EV_VIEW (ev_window->priv->view), visible); - ev_view_find_search_changed (EV_VIEW (ev_window->priv->view)); } #if ENABLE_EPUB else { @@ -5531,7 +5542,7 @@ find_bar_visibility_changed_cb (EggFindBar *find_bar, ev_window_update_actions (ev_window); if (visible) - find_bar_search_changed_cb (find_bar, NULL, ev_window); + ev_window_search_start (ev_window); else egg_find_bar_set_status_text (EGG_FIND_BAR (ev_window->priv->find_bar), NULL); }