import evince-3.28.4-8.el8

This commit is contained in:
CentOS Sources 2020-12-09 06:08:42 +00:00 committed by Andrew Lukoshko
commit 655a91ce4a
12 changed files with 4094 additions and 0 deletions

1
.evince.metadata Normal file
View File

@ -0,0 +1 @@
230997237a449bc71b2c6769f5d30a2d616fba03 SOURCES/evince-3.28.4.tar.xz

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
SOURCES/evince-3.28.4.tar.xz

View File

@ -0,0 +1,86 @@
From 8e20f99f5d73175112b37203ba127519db90aff0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Tue, 10 Jan 2017 15:10:44 +0000
Subject: [PATCH] Resolves: deb#762530 rhbz#1061177 add man pages
for evince-previewer and evince-thumbnailer
---
data/Makefile.am | 2 +-
data/evince-previewer.1 | 24 ++++++++++++++++++++++++
data/evince-thumbnailer.1 | 20 ++++++++++++++++++++
3 files changed, 45 insertions(+), 1 deletion(-)
create mode 100644 data/evince-previewer.1
create mode 100644 data/evince-thumbnailer.1
diff --git a/data/Makefile.am b/data/Makefile.am
index 44fcf33..a45a3cb 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -7,7 +7,7 @@ install-data-local: update-icon-cache
# man file
#
-man_MANS=evince.1
+man_MANS=evince.1 evince-previewer.1 evince-thumbnailer.1
#
# UI descriptions
diff --git a/data/evince-previewer.1 b/data/evince-previewer.1
new file mode 100644
index 0000000..1841509
--- /dev/null
+++ b/data/evince-previewer.1
@@ -0,0 +1,24 @@
+.TH evince\-previewer 1 2015\-07\-28
+.SH NAME
+evince\-previewer \- show a printing preview of PostScript and PDF documents
+.SH SYNOPSIS
+\fBevince\-previewer\fR [options] \fBinput\fR
+.SH DESCRIPTION
+evince\-previewer is a GNOME program to
+show a printing preview from PostScript (PS), Portable Document Format
+(PDF), DjVu and DVI files.
+.SH OPTIONS
+evince\-previewer obeys all normal GNOME and GTK+ command line options.
+The application options are
+.TP
+\fB\-u, \-\-unlink\-tempfile\fR
+Delete the temporary file
+.TP
+\fB\-p, \-\-print-settings=FILE\fR
+Print settings file
+.SH "SEE ALSO"
+\fBevince\fR(1),
+\fBgnome\-options\fR(7),
+\fBgtk\-options\fR(7).
+.PP
+https://wiki.gnome.org/Apps/Evince
diff --git a/data/evince-thumbnailer.1 b/data/evince-thumbnailer.1
new file mode 100644
index 0000000..25ddfec
--- /dev/null
+++ b/data/evince-thumbnailer.1
@@ -0,0 +1,20 @@
+.TH evince\-thumbnailer 1 2007\-01\-15
+.SH NAME
+evince\-thumbnailer \- create png thumbnails from PostScript and PDF documents
+.SH SYNOPSIS
+\fBevince\-thumbnailer\fR [\-s \fBsize\fR] \fBinput\fR \fBoutput\fR
+.SH DESCRIPTION
+evince\-thumbnailer is a GNOME program to
+create thumbnails from PostScript (PS), Portable Document Format
+(PDF), DjVu and DVI files.
+.SH OPTIONS
+evince obeys all normal GNOME and GTK+
+command line options. The only option \-s \fIsize
+\fRmakes it possible to choose the vertical size
+of the created thumbnail.
+.SH "SEE ALSO"
+\fBevince\fR(1),
+\fBgnome\-options\fR(7),
+\fBgtk\-options\fR(7).
+.PP
+http://www.gnome.org/projects/evince/
--
2.9.3

View File

@ -0,0 +1,55 @@
From 22b047c3db84a34fc5fb5076474640bcd3917c73 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Fri, 17 Feb 2017 09:28:18 +0000
Subject: [PATCH] Revert "Bump poppler requirements to 0.33.0"
This reverts commit 5a4912bdbbf3c8000e77a093cf366276eeb56283.
---
backend/pdf/ev-poppler.cc | 4 ++++
configure.ac | 7 ++++++-
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc
index 214094f..f3a6510 100644
--- a/backend/pdf/ev-poppler.cc
+++ b/backend/pdf/ev-poppler.cc
@@ -3508,7 +3508,11 @@ pdf_document_annotations_save_annotation (EvDocumentAnnotations *document_annota
poppler_rect.y2 = height - ev_rect.y1;
if (poppler_annot_markup_has_popup (markup))
+#ifdef HAVE_POPPLER_ANNOT_MARKUP_SET_POPUP_RECTANGLE
poppler_annot_markup_set_popup_rectangle (markup, &poppler_rect);
+#else
+ poppler_annot_markup_set_popup (markup, &poppler_rect);
+#endif
else
poppler_annot_markup_set_popup (markup, &poppler_rect);
}
diff --git a/configure.ac b/configure.ac
index 23a390f..a01392a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -536,7 +536,7 @@ AC_ARG_ENABLE([pdf],
[enable_pdf=yes])
if test "x$enable_pdf" = "xyes"; then
- POPPLER_REQUIRED=0.33.0
+ POPPLER_REQUIRED=0.24.0
PKG_CHECK_MODULES(POPPLER, poppler-glib >= $POPPLER_REQUIRED libxml-2.0 >= $LIBXML_REQUIRED,enable_pdf=yes,enable_pdf=no)
if test "x$enable_pdf" = "xyes"; then
@@ -549,6 +549,11 @@ if test "x$enable_pdf" = "xyes"; then
if test x$enable_cairo_ps = xyes; then
AC_DEFINE([HAVE_CAIRO_PS], [1], [defined if cairo-ps is available])
fi
+
+ evince_save_LIBS=$LIBS
+ LIBS="$LIBS $POPPLER_LIBS"
+ AC_CHECK_FUNCS(poppler_annot_markup_set_popup_rectangle)
+ LIBS=$evince_save_LIBS
else
AC_MSG_ERROR("PDF support is disabled since poppler-glib library version $POPPLER_REQUIRED or newer not found")
fi
--
2.9.3

View File

@ -0,0 +1,76 @@
--- evince-3.21.92/browser-plugin/EvBrowserPluginMain.cpp
+++ evince-3.21.92/browser-plugin/EvBrowserPluginMain.cpp
@@ -38,11 +38,40 @@ static EvBrowserPlugin *pluginForInstanc
return static_cast<EvBrowserPlugin *>(instance->pdata);
}
+static gboolean gtkToolkitIsCompatible(NPP instance)
+{
+ NPNToolkitType toolkit_type = NPNVGtk12;
+ NPError error;
+
+ error = browser->getvalue(instance, NPNVToolkit, &toolkit_type);
+
+ if (error == NPERR_NO_ERROR &&
+ (toolkit_type == NPNVGtk12 ||
+ toolkit_type == NPNVGtk2))
+ return FALSE;
+ else
+ return TRUE;
+}
+
NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char *argn[], char *argv[], NPSavedData *savedData)
{
if (!instance)
return NPERR_INVALID_INSTANCE_ERROR;
+ if (!gtkToolkitIsCompatible(instance))
+ return NPERR_GENERIC_ERROR;
+
+ GBytes *resourceData = g_resources_lookup_data("/org/gnome/evince/browser/ui/evince-browser.css", G_RESOURCE_LOOKUP_FLAGS_NONE, nullptr);
+ if (resourceData) {
+ GtkCssProvider *cssProvider = gtk_css_provider_new();
+
+ gtk_css_provider_load_from_data(cssProvider, static_cast<const gchar *>(g_bytes_get_data(resourceData, nullptr)), g_bytes_get_size(resourceData), nullptr);
+ g_bytes_unref(resourceData);
+
+ gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(cssProvider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ g_object_unref(cssProvider);
+ }
+
return EvBrowserPlugin::create(instance)->initialize(pluginType, mode, argc, argn, argv, savedData);
}
@@ -197,6 +226,11 @@ NPError NP_Initialize(NPNetscapeFuncs *b
if ((browserFuncs->version >> 8) > NP_VERSION_MAJOR)
return NPERR_INCOMPATIBLE_VERSION_ERROR;
+ browser = browserFuncs;
+
+ if (!gtkToolkitIsCompatible(NULL))
+ return NPERR_GENERIC_ERROR;
+
if (!ev_init())
return NPERR_GENERIC_ERROR;
@@ -207,20 +241,8 @@ NPError NP_Initialize(NPNetscapeFuncs *b
return NPERR_GENERIC_ERROR;
#endif
- browser = browserFuncs;
initializePluginFuncs(pluginFuncs);
- GBytes *resourceData = g_resources_lookup_data("/org/gnome/evince/browser/ui/evince-browser.css", G_RESOURCE_LOOKUP_FLAGS_NONE, nullptr);
- if (resourceData) {
- GtkCssProvider *cssProvider = gtk_css_provider_new();
-
- gtk_css_provider_load_from_data(cssProvider, static_cast<const gchar *>(g_bytes_get_data(resourceData, nullptr)), g_bytes_get_size(resourceData), nullptr);
- g_bytes_unref(resourceData);
-
- gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(cssProvider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
- g_object_unref(cssProvider);
- }
-
return NPERR_NO_ERROR;
}

View File

@ -0,0 +1,72 @@
From 3e38d5ad724a042eebadcba8c2d57b0f48b7a8c7 Mon Sep 17 00:00:00 2001
From: Jason Crain <jcrain@src.gnome.org>
Date: Mon, 15 Apr 2019 23:06:36 -0600
Subject: [PATCH] tiff: Handle failure from TIFFReadRGBAImageOriented
The TIFFReadRGBAImageOriented function returns zero if it was unable to
read the image. Return NULL in this case instead of displaying
uninitialized memory.
Fixes #1129
---
backend/tiff/tiff-document.c | 28 ++++++++++++++++++----------
1 file changed, 18 insertions(+), 10 deletions(-)
diff --git a/backend/tiff/tiff-document.c b/backend/tiff/tiff-document.c
index 7715031b..38bb3bd8 100644
--- a/backend/tiff/tiff-document.c
+++ b/backend/tiff/tiff-document.c
@@ -292,18 +292,22 @@ tiff_document_render (EvDocument *document,
g_warning("Failed to allocate memory for rendering.");
return NULL;
}
-
+
+ if (!TIFFReadRGBAImageOriented (tiff_document->tiff,
+ width, height,
+ (uint32 *)pixels,
+ orientation, 0)) {
+ g_warning ("Failed to read TIFF image.");
+ g_free (pixels);
+ return NULL;
+ }
+
surface = cairo_image_surface_create_for_data (pixels,
CAIRO_FORMAT_RGB24,
width, height,
rowstride);
cairo_surface_set_user_data (surface, &key,
pixels, (cairo_destroy_func_t)g_free);
-
- TIFFReadRGBAImageOriented (tiff_document->tiff,
- width, height,
- (uint32 *)pixels,
- orientation, 0);
pop_handlers ();
/* Convert the format returned by libtiff to
@@ -384,13 +388,17 @@ tiff_document_get_thumbnail (EvDocument *document,
if (!pixels)
return NULL;
+ if (!TIFFReadRGBAImageOriented (tiff_document->tiff,
+ width, height,
+ (uint32 *)pixels,
+ ORIENTATION_TOPLEFT, 0)) {
+ g_free (pixels);
+ return NULL;
+ }
+
pixbuf = gdk_pixbuf_new_from_data (pixels, GDK_COLORSPACE_RGB, TRUE, 8,
width, height, rowstride,
(GdkPixbufDestroyNotify) g_free, NULL);
- TIFFReadRGBAImageOriented (tiff_document->tiff,
- width, height,
- (uint32 *)pixels,
- ORIENTATION_TOPLEFT, 0);
pop_handlers ();
ev_render_context_compute_scaled_size (rc, width, height * (x_res / y_res),
--
2.21.0

View File

@ -0,0 +1,465 @@
--- evince-3.28.2/backend/comics/comics-document.c
+++ evince-3.28.2/backend/comics/comics-document.c
@@ -453,23 +453,27 @@ comics_document_render_pixbuf (EvDocumen
name = ev_archive_get_entry_pathname (comics_document->archive);
if (g_strcmp0 (name, page_path) == 0) {
- size_t size = ev_archive_get_entry_size (comics_document->archive);
+ gint64 size = ev_archive_get_entry_size (comics_document->archive);
char *buf;
ssize_t read;
- buf = g_malloc (size);
- read = ev_archive_read_data (comics_document->archive, buf, size, &error);
- if (read <= 0) {
- if (read < 0) {
- g_warning ("Fatal error reading '%s' in archive: %s", name, error->message);
- g_error_free (error);
+ if (size < 0) {
+ g_warning ("Wrong size of entry '%s'.", name);
+ } else {
+ buf = g_malloc (size);
+ read = ev_archive_read_data (comics_document->archive, buf, size, &error);
+ if (read <= 0) {
+ if (read < 0) {
+ g_warning ("Fatal error reading '%s' in archive: %s", name, error->message);
+ g_error_free (error);
+ } else {
+ g_warning ("Read an empty file from the archive");
+ }
} else {
- g_warning ("Read an empty file from the archive");
+ gdk_pixbuf_loader_write (loader, (guchar *) buf, size, NULL);
}
- } else {
- gdk_pixbuf_loader_write (loader, (guchar *) buf, size, NULL);
+ g_free (buf);
}
- g_free (buf);
gdk_pixbuf_loader_close (loader, NULL);
break;
}
--- evince-3.28.2/backend/pdf/ev-poppler.cc
+++ evince-3.28.2/backend/pdf/ev-poppler.cc
@@ -859,6 +859,7 @@ pdf_document_get_info (EvDocument *docum
break;
case POPPLER_PAGE_LAYOUT_TWO_COLUMN_RIGHT:
info->layout = EV_DOCUMENT_LAYOUT_TWO_COLUMN_RIGHT;
+ break;
case POPPLER_PAGE_LAYOUT_TWO_PAGE_LEFT:
info->layout = EV_DOCUMENT_LAYOUT_TWO_PAGE_LEFT;
break;
--- evince-3.28.2/cut-n-paste/libgd/gd-two-lines-renderer.c
+++ evince-3.28.2/cut-n-paste/libgd/gd-two-lines-renderer.c
@@ -281,7 +281,7 @@ gd_two_lines_renderer_render (GtkCellRen
GtkStyleContext *context;
gint line_one_height;
GtkStateFlags state;
- GdkRectangle area, render_area = *cell_area;
+ GdkRectangle area, render_area;
gint xpad, ypad, x_offset_1, x_offset_2, y_offset;
PangoLayout *layout_one, *layout_two;
PangoRectangle layout_rect;
--- evince-3.28.2/cut-n-paste/synctex/synctex_parser.c
+++ evince-3.28.2/cut-n-paste/synctex/synctex_parser.c
@@ -2878,6 +2878,7 @@ int _synctex_open(const char * output, c
build_output[0] = '\0';
} else {
if (build_output != strcpy(build_output,output)) {
+ free(build_output);
return -4;
}
build_output[lpc-output]='\0';
@@ -2886,15 +2887,18 @@ int _synctex_open(const char * output, c
/* Append a path separator if necessary. */
if (!SYNCTEX_IS_PATH_SEPARATOR(build_output[strlen(build_directory)-1])) {
if (build_output != strcat(build_output,"/")) {
+ free(build_output);
return -2;
}
}
/* Append the last path component of the output. */
if (build_output != strcat(build_output,lpc)) {
+ free(build_output);
return -3;
}
return __synctex_open(build_output,synctex_name_ref,file_ref,add_quotes,io_mode_ref);
}
+ free(build_output);
}
return -1;
}
--- evince-3.28.2/cut-n-paste/synctex/synctex_parser_utils.c
+++ evince-3.28.2/cut-n-paste/synctex/synctex_parser_utils.c
@@ -292,6 +292,7 @@ char * _synctex_merge_strings(const char
size_t len = strlen(temp);
if(UINT_MAX-len<size) {
_synctex_error("! _synctex_merge_strings: Capacity exceeded.");
+ va_end(arg);
return NULL;
}
size+=len;
@@ -312,6 +313,7 @@ char * _synctex_merge_strings(const char
_synctex_error("! _synctex_merge_strings: Copy problem");
free(result);
result = NULL;
+ va_end(arg);
return NULL;
}
dest += size;
@@ -393,7 +395,7 @@ int _synctex_get_name(const char * outpu
free(dir_name);
dir_name = NULL;
free(core_name);
- dir_name = NULL;
+ core_name = NULL;
return -2;
}
dir_name[size] = '\0';
@@ -487,6 +489,12 @@ int _synctex_get_name(const char * outpu
/* set up the returned values */
* synctex_name_ref = synctex_name;
* io_mode_ref = io_mode;
+ free(dir_name);
+ dir_name = NULL;
+ free(core_name);
+ core_name = NULL;
+ free(quoted_core_name);
+ quoted_core_name = NULL;
return 0;
}
return -1;/* bad argument */
--- evince-3.28.2/cut-n-paste/unarr/rar/filter-rar.c
+++ evince-3.28.2/cut-n-paste/unarr/rar/filter-rar.c
@@ -273,8 +273,10 @@ static struct RARFilter *rar_create_filt
filter->prog = prog;
filter->globaldatalen = globaldatalen > RARProgramSystemGlobalSize ? globaldatalen : RARProgramSystemGlobalSize;
filter->globaldata = calloc(1, filter->globaldatalen);
- if (!filter->globaldata)
+ if (!filter->globaldata) {
+ free (filter);
return NULL;
+ }
if (globaldata)
memcpy(filter->globaldata, globaldata, globaldatalen);
if (registers)
--- evince-3.28.2/libdocument/ev-document.c
+++ evince-3.28.2/libdocument/ev-document.c
@@ -496,6 +496,9 @@ ev_document_load_stream (EvDocument
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
klass = EV_DOCUMENT_GET_CLASS (document);
+
+ g_return_val_if_fail (klass != NULL, FALSE);
+
if (!klass->load_stream) {
g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
"Backend does not support loading from stream");
@@ -544,6 +547,9 @@ ev_document_load_gfile (EvDocument
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
klass = EV_DOCUMENT_GET_CLASS (document);
+
+ g_return_val_if_fail (klass != NULL, FALSE);
+
if (!klass->load_gfile) {
g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
"Backend does not support loading from GFile");
@@ -867,6 +873,9 @@ ev_document_get_backend_info (EvDocument
g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE);
klass = EV_DOCUMENT_GET_CLASS (document);
+
+ g_return_val_if_fail (klass != NULL, FALSE);
+
if (klass->get_backend_info == NULL)
return FALSE;
--- evince-3.28.2/libview/ev-pixbuf-cache.c
+++ evince-3.28.2/libview/ev-pixbuf-cache.c
@@ -337,6 +337,11 @@ job_finished_cb (EvJob *job,
job_info = find_job_cache (pixbuf_cache, job_render->page);
+ if (job_info == NULL) {
+ g_warning ("Job info not found.");
+ return;
+ }
+
if (ev_job_is_failed (job)) {
job_info->job = NULL;
g_object_unref (job);
@@ -721,6 +726,11 @@ add_job_if_needed (EvPixbufCache *pixbuf
gint device_scale = get_device_scale (pixbuf_cache);
gint width, height;
+ if (job_info == NULL) {
+ g_warning ("Adding job with NULL info.");
+ return;
+ }
+
if (job_info->job)
return;
--- evince-3.28.2/libview/ev-print-operation.c
+++ evince-3.28.2/libview/ev-print-operation.c
@@ -181,6 +181,7 @@ ev_print_operation_set_current_page (EvP
EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+ g_return_if_fail (class != NULL);
g_return_if_fail (current_page >= 0);
class->set_current_page (op, current_page);
@@ -193,6 +194,7 @@ ev_print_operation_set_print_settings (E
EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+ g_return_if_fail (class != NULL);
g_return_if_fail (GTK_IS_PRINT_SETTINGS (print_settings));
class->set_print_settings (op, print_settings);
@@ -210,6 +212,7 @@ ev_print_operation_get_print_settings (E
EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
g_return_val_if_fail (EV_IS_PRINT_OPERATION (op), NULL);
+ g_return_val_if_fail (class != NULL, NULL);
return class->get_print_settings (op);
}
@@ -221,6 +224,7 @@ ev_print_operation_set_default_page_setu
EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+ g_return_if_fail (class != NULL);
g_return_if_fail (GTK_IS_PAGE_SETUP (page_setup));
class->set_default_page_setup (op, page_setup);
@@ -238,6 +242,7 @@ ev_print_operation_get_default_page_setu
EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
g_return_val_if_fail (EV_IS_PRINT_OPERATION (op), NULL);
+ g_return_val_if_fail (class != NULL, NULL);
return class->get_default_page_setup (op);
}
@@ -249,6 +254,7 @@ ev_print_operation_set_job_name (EvPrint
EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+ g_return_if_fail (class != NULL);
g_return_if_fail (job_name != NULL);
class->set_job_name (op, job_name);
@@ -260,6 +266,7 @@ ev_print_operation_get_job_name (EvPrint
EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
g_return_val_if_fail (EV_IS_PRINT_OPERATION (op), NULL);
+ g_return_val_if_fail (class != NULL, NULL);
return class->get_job_name (op);
}
@@ -271,6 +278,7 @@ ev_print_operation_run (EvPrintOperation
EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+ g_return_if_fail (class != NULL);
class->run (op, parent);
}
@@ -281,6 +289,7 @@ ev_print_operation_cancel (EvPrintOperat
EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+ g_return_if_fail (class != NULL);
class->cancel (op);
}
@@ -292,6 +301,7 @@ ev_print_operation_get_error (EvPrintOpe
EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+ g_return_if_fail (class != NULL);
class->get_error (op, error);
}
@@ -303,6 +313,7 @@ ev_print_operation_set_embed_page_setup
EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+ g_return_if_fail (class != NULL);
class->set_embed_page_setup (op, embed);
}
@@ -313,6 +324,7 @@ ev_print_operation_get_embed_page_setup
EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
g_return_val_if_fail (EV_IS_PRINT_OPERATION (op), FALSE);
+ g_return_val_if_fail (class != NULL, FALSE);
return class->get_embed_page_setup (op);
}
--- evince-3.28.2/libview/ev-timeline.c
+++ evince-3.28.2/libview/ev-timeline.c
@@ -289,9 +289,15 @@ ev_timeline_new (guint duration)
void
ev_timeline_start (EvTimeline *timeline)
{
+ EvTimelineClass *klass;
+
g_return_if_fail (EV_IS_TIMELINE (timeline));
- EV_TIMELINE_GET_CLASS (timeline)->start (timeline);
+ klass = EV_TIMELINE_GET_CLASS (timeline);
+
+ g_return_if_fail (klass != NULL);
+
+ klass->start (timeline);
}
void
--- evince-3.28.2/libview/ev-view.c
+++ evince-3.28.2/libview/ev-view.c
@@ -1147,7 +1147,7 @@ ensure_rectangle_is_visible (EvView *vie
if (rect->x < adj_value) {
value = MAX (gtk_adjustment_get_lower (adjustment), rect->x - MARGIN);
gtk_adjustment_set_value (view->hadjustment, value);
- } else if (rect->x + rect->height > adj_value + allocation.width) {
+ } else if (rect->x + rect->width > adj_value + allocation.width) {
value = MIN (gtk_adjustment_get_upper (adjustment), rect->x + rect->width -
allocation.width + MARGIN);
gtk_adjustment_set_value (view->hadjustment, value);
@@ -1777,6 +1777,11 @@ goto_fitv_dest (EvView *view, EvLinkDest
page = ev_link_dest_get_page (dest);
+ if (page < 0) {
+ g_warning ("Link does not contain a page.");
+ return;
+ }
+
left = ev_link_dest_get_left (dest, &change_left);
doc_point.x = change_left ? left : 0;
doc_point.y = 0;
@@ -1813,6 +1818,11 @@ goto_fith_dest (EvView *view, EvLinkDest
page = ev_link_dest_get_page (dest);
+ if (page < 0) {
+ g_warning ("Link does not contain a page.");
+ return;
+ }
+
top = ev_link_dest_get_top (dest, &change_top);
doc_point.x = 0;
doc_point.y = change_top ? top : 0;
@@ -1846,6 +1856,11 @@ goto_fit_dest (EvView *view, EvLinkDest
page = ev_link_dest_get_page (dest);
+ if (page < 0) {
+ g_warning ("Link does not contain a page.");
+ return;
+ }
+
if (view->allow_links_change_zoom) {
double zoom;
gdouble doc_width, doc_height;
--- evince-3.28.2/libview/ev-view-presentation.c
+++ evince-3.28.2/libview/ev-view-presentation.c
@@ -448,7 +448,7 @@ ev_view_presentation_update_current_page
{
gint jump;
- if (page < 0 || page >= ev_document_get_n_pages (pview->document))
+ if (page >= ev_document_get_n_pages (pview->document))
return;
ev_view_presentation_animation_cancel (pview);
--- evince-3.28.2/shell/ev-sidebar.c
+++ evince-3.28.2/shell/ev-sidebar.c
@@ -471,18 +471,19 @@ ev_sidebar_add_page (EvSidebar *ev_sid
/* Set the first item added as active */
- gtk_tree_model_get_iter_first (ev_sidebar->priv->page_model, &iter);
- gtk_tree_model_get (ev_sidebar->priv->page_model,
- &iter,
- PAGE_COLUMN_TITLE, &label_title,
- PAGE_COLUMN_NOTEBOOK_INDEX, &index,
- -1);
+ if (gtk_tree_model_get_iter_first (ev_sidebar->priv->page_model, &iter)) {
+ gtk_tree_model_get (ev_sidebar->priv->page_model,
+ &iter,
+ PAGE_COLUMN_TITLE, &label_title,
+ PAGE_COLUMN_NOTEBOOK_INDEX, &index,
+ -1);
- gtk_menu_set_active (GTK_MENU (ev_sidebar->priv->menu), index);
- gtk_label_set_text (GTK_LABEL (ev_sidebar->priv->label), label_title);
- gtk_notebook_set_current_page (GTK_NOTEBOOK (ev_sidebar->priv->notebook),
- index);
- g_free (label_title);
+ gtk_menu_set_active (GTK_MENU (ev_sidebar->priv->menu), index);
+ gtk_label_set_text (GTK_LABEL (ev_sidebar->priv->label), label_title);
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (ev_sidebar->priv->notebook),
+ index);
+ g_free (label_title);
+ }
}
static gboolean
--- evince-3.28.2/shell/ev-sidebar-thumbnails.c
+++ evince-3.28.2/shell/ev-sidebar-thumbnails.c
@@ -658,11 +658,11 @@ ev_sidebar_thumbnails_fill_model (EvSide
int i;
gint prev_width = -1;
gint prev_height = -1;
+ cairo_surface_t *loading_icon = NULL;
for (i = 0; i < sidebar_thumbnails->priv->n_pages; i++) {
gchar *page_label;
gchar *page_string;
- cairo_surface_t *loading_icon = NULL;
gint width, height;
page_label = ev_document_get_page_label (priv->document, i);
--- evince-3.28.2/shell/ev-window.c
+++ evince-3.28.2/shell/ev-window.c
@@ -3121,10 +3121,10 @@ ev_window_load_print_settings_from_metad
for (i = 0; i < G_N_ELEMENTS (document_print_settings); i++) {
gchar *value = NULL;
- ev_metadata_get_string (window->priv->metadata,
- document_print_settings[i], &value);
- gtk_print_settings_set (print_settings,
- document_print_settings[i], value);
+ if (ev_metadata_get_string (window->priv->metadata,
+ document_print_settings[i], &value))
+ gtk_print_settings_set (print_settings,
+ document_print_settings[i], value);
}
}
@@ -4705,12 +4705,16 @@ ev_window_cmd_bookmarks_add (GSimpleActi
gchar *page_label;
bm.page = ev_document_model_get_page (window->priv->model);
- page_label = ev_document_get_page_label (window->priv->document, bm.page);
- bm.title = g_strdup_printf (_("Page %s"), page_label);
- g_free (page_label);
+ if (bm.page >= 0) {
+ page_label = ev_document_get_page_label (window->priv->document, bm.page);
+ bm.title = g_strdup_printf (_("Page %s"), page_label);
+ g_free (page_label);
- /* EvBookmarks takes ownership of bookmark */
- ev_bookmarks_add (window->priv->bookmarks, &bm);
+ /* EvBookmarks takes ownership of bookmark */
+ ev_bookmarks_add (window->priv->bookmarks, &bm);
+ } else {
+ g_warning ("Bookmarking of a page failed.");
+ }
}
static void

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,36 @@
From 9363553a3087c7dbfa93e1d342283600ceb5993b Mon Sep 17 00:00:00 2001
From: Marek Kasik <mkasik@redhat.com>
Date: Fri, 22 Jun 2018 17:00:20 +0200
Subject: shell: Set application-id
Set "application-id" property for evince's GApplication
to "org.gnome.evince.Application".
An assertion warning is shown in shell if it is not set.
Even though we use G_APPLICATION_NON_UNIQUE, the application
ID is still required. See:
https://bugzilla.gnome.org/show_bug.cgi?id=646985#c2
Closes: https://gitlab.gnome.org/GNOME/evince/issues/918
diff --git a/shell/ev-application.c b/shell/ev-application.c
index 7d546933..f173d7a4 100644
--- a/shell/ev-application.c
+++ b/shell/ev-application.c
@@ -65,6 +65,7 @@ struct _EvApplicationClass {
G_DEFINE_TYPE (EvApplication, ev_application, GTK_TYPE_APPLICATION)
#ifdef ENABLE_DBUS
+#define APPLICATION_DBUS_NAME "org.gnome.evince.Application"
#define APPLICATION_DBUS_OBJECT_PATH "/org/gnome/evince/Evince"
#define APPLICATION_DBUS_INTERFACE "org.gnome.evince.Application"
@@ -102,7 +103,7 @@ ev_application_new (void)
const GApplicationFlags flags = G_APPLICATION_NON_UNIQUE;
return g_object_new (EV_TYPE_APPLICATION,
- "application-id", NULL,
+ "application-id", APPLICATION_DBUS_NAME,
"flags", flags,
NULL);
}

View File

@ -0,0 +1,62 @@
From 9d6ebdb168f8438449c43e63f38f687e09c8fe4f Mon Sep 17 00:00:00 2001
From: Marek Kasik <mkasik@redhat.com>
Date: Thu, 5 Mar 2020 13:21:59 +0100
Subject: [PATCH] ev-view: Move annotation popup window to new position
Open annotation popup window at new position if its
annotation was moved when the popup window was hidden.
This places existing popup window the same way as when
it was created.
---
libview/ev-view.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/libview/ev-view.c b/libview/ev-view.c
index ffbe1704..43a0410d 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -3390,6 +3390,41 @@ ev_view_handle_annotation (EvView *view,
parent = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view)));
window = ev_view_create_annotation_window (view, annot, parent);
+ } else if (window && ev_annotation_markup_has_popup (EV_ANNOTATION_MARKUP (annot))) {
+ EvViewWindowChild *child;
+ EvMappingList *annots;
+ EvRectangle popup_rect;
+ EvMapping *mapping;
+ GdkPoint view_point;
+ EvPoint annotation_corner;
+
+ child = ev_view_get_window_child (view, window);
+ annots = ev_page_cache_get_annot_mapping (view->page_cache,
+ ev_annotation_get_page_index (annot));
+ mapping = ev_mapping_list_find (annots, annot);
+ ev_annotation_markup_get_rectangle (EV_ANNOTATION_MARKUP (annot),
+ &popup_rect);
+
+ popup_rect.x2 = mapping->area.x2 + popup_rect.x2 - popup_rect.x1;
+ popup_rect.y2 = mapping->area.y2 + popup_rect.y2 - popup_rect.y1;
+ popup_rect.x1 = mapping->area.x2;
+ popup_rect.y1 = mapping->area.y2;
+ g_object_set (annot,
+ "rectangle", &popup_rect,
+ "popup_is_open", TRUE,
+ NULL);
+
+ annotation_corner.x = mapping->area.x2;
+ annotation_corner.y = mapping->area.y2;
+
+ _ev_view_transform_doc_point_to_view_point (view,
+ ev_annotation_get_page_index (annot),
+ &annotation_corner,
+ &view_point);
+
+ ev_view_window_child_move (view, child,
+ child->parent_x + view_point.x - view->scroll_x,
+ child->parent_y + view_point.y - view->scroll_y);
}
ev_view_annotation_show_popup_window (view, window);
}
--
2.24.1

View File

@ -0,0 +1,395 @@
From fe9573da1278463a76b685c5cb3116d6e8241e27 Mon Sep 17 00:00:00 2001
From: Marek Kasik <mkasik@redhat.com>
Date: Wed, 22 Jul 2020 16:26:17 +0200
Subject: [PATCH] Handle reset form action
Add new type of action EV_LINK_ACTION_TYPE_RESET_FORM for EvLinkAction
together with properties "reset-fields" and "exclude-reset-fields".
The properties controls which fields are reset and are set in PDF document.
This commit extends EvDocumentFormsInterface with new method "reset_form".
Check for poppler 0.90.0 or higher when calling its methods for resetting
of forms.
Issue #46
---
backend/pdf/ev-poppler.cc | 29 ++++++++++
libdocument/ev-document-forms.c | 10 ++++
libdocument/ev-document-forms.h | 4 ++
libdocument/ev-link-action.c | 81 ++++++++++++++++++++++++++++++++-
libdocument/ev-link-action.h | 51 +++++++++++----------
libview/ev-view.c | 4 ++
shell/ev-window.c | 15 ++++++
7 files changed, 166 insertions(+), 24 deletions(-)
diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc
index ee9a5c9f..efffef0b 100644
--- a/backend/pdf/ev-poppler.cc
+++ b/backend/pdf/ev-poppler.cc
@@ -1721,6 +1721,23 @@ ev_link_from_action (PdfDocument *pdf_document,
case POPPLER_ACTION_JAVASCRIPT:
unimplemented_action = "POPPLER_ACTION_JAVASCRIPT";
break;
+#if POPPLER_CHECK_VERSION(0, 90, 0)
+ case POPPLER_ACTION_RESET_FORM: {
+ gboolean exclude_reset_fields;
+ GList *reset_fields = NULL;
+ GList *iter;
+
+ for (iter = action->reset_form.fields; iter; iter = iter->next)
+ reset_fields = g_list_prepend (reset_fields, g_strdup ((char *) iter->data));
+
+ exclude_reset_fields = action->reset_form.exclude;
+
+ /* The action takes the ownership of the list */
+ ev_action = ev_link_action_new_reset_form (g_list_reverse (reset_fields),
+ exclude_reset_fields);
+ break;
+ }
+#endif
case POPPLER_ACTION_UNKNOWN:
unimplemented_action = "POPPLER_ACTION_UNKNOWN";
}
@@ -2845,6 +2860,17 @@ pdf_document_forms_document_is_modified (EvDocumentForms *document)
return PDF_DOCUMENT (document)->forms_modified;
}
+static void
+pdf_document_forms_reset_form (EvDocumentForms *document,
+ EvLinkAction *action)
+{
+#if POPPLER_CHECK_VERSION(0, 90, 0)
+ poppler_document_reset_form (PDF_DOCUMENT (document)->document,
+ ev_link_action_get_reset_fields (action),
+ ev_link_action_get_exclude_reset_fields (action));
+#endif
+}
+
static gchar *
pdf_document_forms_form_field_text_get_text (EvDocumentForms *document,
EvFormField *field)
@@ -3044,6 +3068,7 @@ pdf_document_document_forms_iface_init (EvDocumentFormsInterface *iface)
{
iface->get_form_fields = pdf_document_forms_get_form_fields;
iface->document_is_modified = pdf_document_forms_document_is_modified;
+ iface->reset_form = pdf_document_forms_reset_form;
iface->form_field_text_get_text = pdf_document_forms_form_field_text_get_text;
iface->form_field_text_set_text = pdf_document_forms_form_field_text_set_text;
iface->form_field_button_set_state = pdf_document_forms_form_field_button_set_state;
diff --git a/libdocument/ev-document-forms.c b/libdocument/ev-document-forms.c
index 19417c77..1fe983b1 100644
--- a/libdocument/ev-document-forms.c
+++ b/libdocument/ev-document-forms.c
@@ -45,6 +45,16 @@ ev_document_forms_document_is_modified (EvDocumentForms *document_forms)
return (iface->document_is_modified) ? iface->document_is_modified (document_forms) : FALSE;
}
+void
+ev_document_forms_reset_form (EvDocumentForms *document_forms,
+ EvLinkAction *action)
+{
+ EvDocumentFormsInterface *iface = EV_DOCUMENT_FORMS_GET_IFACE (document_forms);
+
+ if (iface->reset_form)
+ iface->reset_form (document_forms, action);
+}
+
gchar *
ev_document_forms_form_field_text_get_text (EvDocumentForms *document_forms,
EvFormField *field)
diff --git a/libdocument/ev-document-forms.h b/libdocument/ev-document-forms.h
index 198f3eb5..f78dba6b 100644
--- a/libdocument/ev-document-forms.h
+++ b/libdocument/ev-document-forms.h
@@ -82,6 +82,8 @@ struct _EvDocumentFormsInterface
const gchar *text);
gchar *(* form_field_choice_get_text) (EvDocumentForms *document_forms,
EvFormField *field);
+ void (* reset_form) (EvDocumentForms *document_forms,
+ EvLinkAction *action);
};
GType ev_document_forms_get_type (void) G_GNUC_CONST;
@@ -122,6 +124,8 @@ void ev_document_forms_form_field_choice_set_text (EvDocumentFor
const gchar *text);
gchar *ev_document_forms_form_field_choice_get_text (EvDocumentForms *document_forms,
EvFormField *field);
+void ev_document_forms_reset_form (EvDocumentForms *document_forms,
+ EvLinkAction *action);
G_END_DECLS
diff --git a/libdocument/ev-link-action.c b/libdocument/ev-link-action.c
index 0e7761d7..cbc5d620 100644
--- a/libdocument/ev-link-action.c
+++ b/libdocument/ev-link-action.c
@@ -32,7 +32,9 @@ enum {
PROP_NAME,
PROP_SHOW_LIST,
PROP_HIDE_LIST,
- PROP_TOGGLE_LIST
+ PROP_TOGGLE_LIST,
+ PROP_RESET_FIELDS,
+ PROP_EXCLUDE_RESET_FIELDS
};
struct _EvLinkAction {
@@ -55,6 +57,8 @@ struct _EvLinkActionPrivate {
GList *show_list;
GList *hide_list;
GList *toggle_list;
+ GList *reset_fields;
+ gboolean exclude_reset_fields;
};
G_DEFINE_TYPE (EvLinkAction, ev_link_action, G_TYPE_OBJECT)
@@ -155,6 +159,34 @@ ev_link_action_get_toggle_list (EvLinkAction *self)
return self->priv->toggle_list;
}
+/**
+ * ev_link_action_get_reset_fields:
+ * @self: an #EvLinkAction
+ *
+ * Returns: (transfer none) (element-type gchar *): a list of fields to reset
+ */
+GList *
+ev_link_action_get_reset_fields (EvLinkAction *self)
+{
+ g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
+
+ return self->priv->reset_fields;
+}
+
+/**
+ * ev_link_action_get_exclude_reset_fields:
+ * @self: an #EvLinkAction
+ *
+ * Returns: whether to exclude reset fields when resetting form
+ */
+gboolean
+ev_link_action_get_exclude_reset_fields (EvLinkAction *self)
+{
+ g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
+
+ return self->priv->exclude_reset_fields;
+}
+
static void
ev_link_action_get_property (GObject *object,
guint prop_id,
@@ -193,6 +225,12 @@ ev_link_action_get_property (GObject *object,
case PROP_TOGGLE_LIST:
g_value_set_pointer (value, self->priv->toggle_list);
break;
+ case PROP_RESET_FIELDS:
+ g_value_set_pointer (value, self->priv->reset_fields);
+ break;
+ case PROP_EXCLUDE_RESET_FIELDS:
+ g_value_set_boolean (value, self->priv->exclude_reset_fields);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
prop_id,
@@ -241,6 +279,12 @@ ev_link_action_set_property (GObject *object,
case PROP_TOGGLE_LIST:
self->priv->toggle_list = g_value_get_pointer (value);
break;
+ case PROP_RESET_FIELDS:
+ self->priv->reset_fields = g_value_get_pointer (value);
+ break;
+ case PROP_EXCLUDE_RESET_FIELDS:
+ self->priv->exclude_reset_fields = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
prop_id,
@@ -296,6 +340,11 @@ ev_link_action_finalize (GObject *object)
priv->toggle_list = NULL;
}
+ if (priv->reset_fields) {
+ g_list_free_full (priv->reset_fields, g_free);
+ priv->reset_fields = NULL;
+ }
+
G_OBJECT_CLASS (ev_link_action_parent_class)->finalize (object);
}
@@ -309,6 +358,8 @@ ev_link_action_init (EvLinkAction *ev_link_action)
ev_link_action->priv->filename = NULL;
ev_link_action->priv->params = NULL;
ev_link_action->priv->name = NULL;
+ ev_link_action->priv->reset_fields = NULL;
+ ev_link_action->priv->exclude_reset_fields = FALSE;
}
static void
@@ -402,6 +453,23 @@ ev_link_action_class_init (EvLinkActionClass *ev_link_action_class)
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (g_object_class,
+ PROP_RESET_FIELDS,
+ g_param_spec_pointer ("reset-fields",
+ "ResetFields",
+ "The list of fields that should be/should not be reset",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (g_object_class,
+ PROP_EXCLUDE_RESET_FIELDS,
+ g_param_spec_boolean ("exclude-reset-fields",
+ "ExcludeResetFields",
+ "Whether to exclude/include reset-fields when resetting form",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
}
EvLinkAction *
@@ -474,6 +542,17 @@ ev_link_action_new_layers_state (GList *show_list,
NULL));
}
+EvLinkAction *
+ev_link_action_new_reset_form (GList *reset_fields,
+ gboolean exclude_reset_fields)
+{
+ return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
+ "exclude-reset-fields", exclude_reset_fields,
+ "reset-fields", reset_fields,
+ "type", EV_LINK_ACTION_TYPE_RESET_FORM,
+ NULL));
+}
+
/**
* ev_link_action_equal:
* @a: a #EvLinkAction
diff --git a/libdocument/ev-link-action.h b/libdocument/ev-link-action.h
index 3d6c5fd8..4dffeb74 100644
--- a/libdocument/ev-link-action.h
+++ b/libdocument/ev-link-action.h
@@ -47,36 +47,41 @@ typedef enum {
EV_LINK_ACTION_TYPE_EXTERNAL_URI,
EV_LINK_ACTION_TYPE_LAUNCH,
EV_LINK_ACTION_TYPE_NAMED,
- EV_LINK_ACTION_TYPE_LAYERS_STATE
+ EV_LINK_ACTION_TYPE_LAYERS_STATE,
+ EV_LINK_ACTION_TYPE_RESET_FORM
/* We'll probably fill this in more as we support the other types of
* actions */
} EvLinkActionType;
-GType ev_link_action_get_type (void) G_GNUC_CONST;
+GType ev_link_action_get_type (void) G_GNUC_CONST;
-EvLinkActionType ev_link_action_get_action_type (EvLinkAction *self);
-EvLinkDest *ev_link_action_get_dest (EvLinkAction *self);
-const gchar *ev_link_action_get_uri (EvLinkAction *self);
-const gchar *ev_link_action_get_filename (EvLinkAction *self);
-const gchar *ev_link_action_get_params (EvLinkAction *self);
-const gchar *ev_link_action_get_name (EvLinkAction *self);
-GList *ev_link_action_get_show_list (EvLinkAction *self);
-GList *ev_link_action_get_hide_list (EvLinkAction *self);
-GList *ev_link_action_get_toggle_list (EvLinkAction *self);
+EvLinkActionType ev_link_action_get_action_type (EvLinkAction *self);
+EvLinkDest *ev_link_action_get_dest (EvLinkAction *self);
+const gchar *ev_link_action_get_uri (EvLinkAction *self);
+const gchar *ev_link_action_get_filename (EvLinkAction *self);
+const gchar *ev_link_action_get_params (EvLinkAction *self);
+const gchar *ev_link_action_get_name (EvLinkAction *self);
+GList *ev_link_action_get_show_list (EvLinkAction *self);
+GList *ev_link_action_get_hide_list (EvLinkAction *self);
+GList *ev_link_action_get_toggle_list (EvLinkAction *self);
+GList *ev_link_action_get_reset_fields (EvLinkAction *self);
+gboolean ev_link_action_get_exclude_reset_fields (EvLinkAction *self);
-EvLinkAction *ev_link_action_new_dest (EvLinkDest *dest);
-EvLinkAction *ev_link_action_new_remote (EvLinkDest *dest,
- const gchar *filename);
-EvLinkAction *ev_link_action_new_external_uri (const gchar *uri);
-EvLinkAction *ev_link_action_new_launch (const gchar *filename,
- const gchar *params);
-EvLinkAction *ev_link_action_new_named (const gchar *name);
-EvLinkAction *ev_link_action_new_layers_state (GList *show_list,
- GList *hide_list,
- GList *toggle_list);
+EvLinkAction *ev_link_action_new_dest (EvLinkDest *dest);
+EvLinkAction *ev_link_action_new_remote (EvLinkDest *dest,
+ const gchar *filename);
+EvLinkAction *ev_link_action_new_external_uri (const gchar *uri);
+EvLinkAction *ev_link_action_new_launch (const gchar *filename,
+ const gchar *params);
+EvLinkAction *ev_link_action_new_named (const gchar *name);
+EvLinkAction *ev_link_action_new_layers_state (GList *show_list,
+ GList *hide_list,
+ GList *toggle_list);
+EvLinkAction *ev_link_action_new_reset_form (GList *fields,
+ gboolean exclude_fields);
-gboolean ev_link_action_equal (EvLinkAction *a,
- EvLinkAction *b);
+gboolean ev_link_action_equal (EvLinkAction *a,
+ EvLinkAction *b);
G_END_DECLS
diff --git a/libview/ev-view.c b/libview/ev-view.c
index c52ecaf3..e2ca6b5a 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -2095,6 +2095,7 @@ ev_view_handle_link (EvView *view, EvLink *link)
case EV_LINK_ACTION_TYPE_EXTERNAL_URI:
case EV_LINK_ACTION_TYPE_LAUNCH:
case EV_LINK_ACTION_TYPE_NAMED:
+ case EV_LINK_ACTION_TYPE_RESET_FORM:
g_signal_emit (view, signals[SIGNAL_EXTERNAL_LINK], 0, action);
break;
}
@@ -2167,6 +2168,9 @@ tip_from_link (EvView *view, EvLink *link)
case EV_LINK_ACTION_TYPE_NAMED:
msg = tip_from_action_named (action);
break;
+ case EV_LINK_ACTION_TYPE_RESET_FORM:
+ msg = g_strdup_printf (_("Reset form"));
+ break;
default:
if (title)
msg = g_strdup (title);
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 1f3ea24d..81a6ede1 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -6867,6 +6867,18 @@ do_action_named (EvWindow *window, EvLinkAction *action)
}
}
+static void
+reset_form (EvWindow *window, EvLinkAction *action)
+{
+ EvWindowPrivate *priv = window->priv;
+ EvDocument *document = priv->document;
+
+ if (EV_IS_DOCUMENT_FORMS (document)) {
+ ev_document_forms_reset_form (EV_DOCUMENT_FORMS (document), action);
+ ev_view_reload (EV_VIEW (priv->view));
+ }
+}
+
static void
view_external_link_cb (EvWindow *window, EvLinkAction *action)
{
@@ -6893,6 +6905,9 @@ view_external_link_cb (EvWindow *window, EvLinkAction *action)
case EV_LINK_ACTION_TYPE_NAMED:
do_action_named (window, action);
break;
+ case EV_LINK_ACTION_TYPE_RESET_FORM:
+ reset_form (window, action);
+ break;
default:
g_assert_not_reached ();
}
--
2.28.0

1416
SPECS/evince.spec Normal file

File diff suppressed because it is too large Load Diff