From 58cda9cc7fb79ca9df6746de7f9662bc08dc156a Mon Sep 17 00:00:00 2001 From: Stefan Malzner Date: Fri, 13 Oct 2017 12:29:40 +0200 Subject: initial commit --- src/electron/webview-ime-focus.js | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/electron/webview-ime-focus.js (limited to 'src/electron/webview-ime-focus.js') diff --git a/src/electron/webview-ime-focus.js b/src/electron/webview-ime-focus.js new file mode 100644 index 000000000..1213b518e --- /dev/null +++ b/src/electron/webview-ime-focus.js @@ -0,0 +1,40 @@ +const { releaseDocumentFocus } = require('./webview-ime-focus-helpers'); + +function giveWebviewDocumentFocus(element) { + releaseDocumentFocus(); + + window.requestAnimationFrame(() => { + element.send('claim-document-focus'); + }); +} + +function elementIsUnfocusedWebview(element) { + return element.tagName === 'WEBVIEW' && !element.getWebContents().isFocused(); +} + +function webviewDidAutofocus(element) { + function didKeyDown() { + element.removeEventListener('keydown', didKeyDown, true); + giveWebviewDocumentFocus(element); + } + + element.addEventListener('keydown', didKeyDown, true); +} + +function handleAutofocus(element) { + element.addEventListener('ipc-message', (event) => { + if (event.channel === 'autofocus') { + element.focus(); + webviewDidAutofocus(element); + } + }); +} + +function didMouseDown(event) { + if (elementIsUnfocusedWebview(event.target)) { + giveWebviewDocumentFocus(event.target); + } +} + +document.addEventListener('mousedown', didMouseDown, true); +document.querySelectorAll('webview').forEach(handleAutofocus); -- cgit v1.2.3-70-g09d2