diff options
author | Stefan Malzner <stefan@adlk.io> | 2017-10-13 12:29:40 +0200 |
---|---|---|
committer | Stefan Malzner <stefan@adlk.io> | 2017-10-13 12:29:40 +0200 |
commit | 58cda9cc7fb79ca9df6746de7f9662bc08dc156a (patch) | |
tree | 1211600c2a5d3b5f81c435c6896618111a611720 /src/electron/webview-ime-focus.js | |
download | ferdium-app-58cda9cc7fb79ca9df6746de7f9662bc08dc156a.tar.gz ferdium-app-58cda9cc7fb79ca9df6746de7f9662bc08dc156a.tar.zst ferdium-app-58cda9cc7fb79ca9df6746de7f9662bc08dc156a.zip |
initial commit
Diffstat (limited to 'src/electron/webview-ime-focus.js')
-rw-r--r-- | src/electron/webview-ime-focus.js | 40 |
1 files changed, 40 insertions, 0 deletions
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 @@ | |||
1 | const { releaseDocumentFocus } = require('./webview-ime-focus-helpers'); | ||
2 | |||
3 | function giveWebviewDocumentFocus(element) { | ||
4 | releaseDocumentFocus(); | ||
5 | |||
6 | window.requestAnimationFrame(() => { | ||
7 | element.send('claim-document-focus'); | ||
8 | }); | ||
9 | } | ||
10 | |||
11 | function elementIsUnfocusedWebview(element) { | ||
12 | return element.tagName === 'WEBVIEW' && !element.getWebContents().isFocused(); | ||
13 | } | ||
14 | |||
15 | function webviewDidAutofocus(element) { | ||
16 | function didKeyDown() { | ||
17 | element.removeEventListener('keydown', didKeyDown, true); | ||
18 | giveWebviewDocumentFocus(element); | ||
19 | } | ||
20 | |||
21 | element.addEventListener('keydown', didKeyDown, true); | ||
22 | } | ||
23 | |||
24 | function handleAutofocus(element) { | ||
25 | element.addEventListener('ipc-message', (event) => { | ||
26 | if (event.channel === 'autofocus') { | ||
27 | element.focus(); | ||
28 | webviewDidAutofocus(element); | ||
29 | } | ||
30 | }); | ||
31 | } | ||
32 | |||
33 | function didMouseDown(event) { | ||
34 | if (elementIsUnfocusedWebview(event.target)) { | ||
35 | giveWebviewDocumentFocus(event.target); | ||
36 | } | ||
37 | } | ||
38 | |||
39 | document.addEventListener('mousedown', didMouseDown, true); | ||
40 | document.querySelectorAll('webview').forEach(handleAutofocus); | ||