From 3c1e3146bb6b7e8fbd7fde21a468ccccb8f5c257 Mon Sep 17 00:00:00 2001 From: Takashi Tamura Date: Fri, 14 Feb 2020 22:53:31 +0900 Subject: [PATCH] To enable keyboard shortcuts of VS Code when the iframe is focused, we have to dispatch keyboard events in the parent window. See https://github.com/microsoft/vscode/issues/65452 Close #1406. --- src/components/viewer.ts | 6 ++++++ viewer/latexworkshop.ts | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/components/viewer.ts b/src/components/viewer.ts index 4ebc749b8..c80cc6315 100644 --- a/src/components/viewer.ts +++ b/src/components/viewer.ts @@ -158,6 +158,12 @@ export class Viewer { iframe.contentWindow.focus(); }, 100); } + // To enable keyboard shortcuts of VS Code when the iframe is focused, + // we have to dispatch keyboard events in the parent window. + // See https://github.com/microsoft/vscode/issues/65452 + window.addEventListener("message", (e) => { + window.dispatchEvent(new KeyboardEvent('keydown', e.data)); + }, false); ` diff --git a/viewer/latexworkshop.ts b/viewer/latexworkshop.ts index 8f0fab7a8..13aa16ed3 100644 --- a/viewer/latexworkshop.ts +++ b/viewer/latexworkshop.ts @@ -61,6 +61,7 @@ class LateXWorkshopPdfViewer implements ILatexWorkshopPdfViewer { this.hidePrintButton() this.registerKeybinding() this.startConnectionKeeper() + this.startRebroadcastingKeyboardEvent() } onWillStartPdfViewer(cb: (e: Event) => any): IDisposable { @@ -310,6 +311,25 @@ class LateXWorkshopPdfViewer implements ILatexWorkshopPdfViewer { }, 30000) } + startRebroadcastingKeyboardEvent() { + if (!this.embedded) { + return + } + document.addEventListener('keydown', e => { + const obj = { + altKey: e.altKey, + code: e.code, + ctrlKey: e.ctrlKey, + isComposing: e.isComposing, + key: e.key, + location: e.location, + metaKey: e.metaKey, + repeat: e.repeat, + shiftKey: e.shiftKey + } + window.parent.postMessage(obj, '*') + }) + } } new LateXWorkshopPdfViewer()