From 1fa5ce7f48f43d720fe81d6426fae7b4c905a884 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 17 Mar 2021 16:07:10 +0100 Subject: [PATCH] Ignore some *scripting* events which don't make sense in PresentationMode A number of the currently supported *scripting* events only make sense in the "normal" viewer mode, and not when PresentationMode is active. For example: - Changing the zoom-level will outright break rendering in PresentationMode, since it relies on "page-fit" being used. - Focusing a particular (AcroForm) element won't work, and could break keyboard navigation, since forms should not be editable in PresentationMode (see issue 12232). --- web/pdf_scripting_manager.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/web/pdf_scripting_manager.js b/web/pdf_scripting_manager.js index 976bc610a..234b4398d 100644 --- a/web/pdf_scripting_manager.js +++ b/web/pdf_scripting_manager.js @@ -261,6 +261,11 @@ class PDFScriptingManager { * @private */ async _updateFromSandbox(detail) { + // Ignore some events, see below, that don't make sense in PresentationMode. + const isInPresentationMode = + this._pdfViewer.isInPresentationMode || + this._pdfViewer.isChangingPresentationMode; + const { id, command, value } = detail; if (!id) { switch (command) { @@ -284,12 +289,21 @@ class PDFScriptingManager { console.log(value); break; case "zoom": + if (isInPresentationMode) { + return; + } this._pdfViewer.currentScaleValue = value; break; } return; } + if (isInPresentationMode) { + if (detail.focus) { + return; + } + } + const element = document.getElementById(id); if (element) { element.dispatchEvent(new CustomEvent("updatefromsandbox", { detail })); @@ -382,11 +396,9 @@ class PDFScriptingManager { * @private */ async _getDocProperties() { - // The default viewer use-case. if (this._docPropertiesLookup) { return this._docPropertiesLookup(this._pdfDocument); } - // Fallback, to support the viewer components use-case. if (typeof PDFJSDev !== "undefined" && PDFJSDev.test("COMPONENTS")) { const { docPropertiesLookup } = require("./generic_scripting.js");