blob: e187ee0b4a107cb9c2baf1a45014f683838eeaa9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import { webContents } from '@electron/remote';
import { releaseDocumentFocus } from './webview-ime-focus-helpers';
function giveWebviewDocumentFocus(element) {
releaseDocumentFocus();
window.requestAnimationFrame(() => {
element.send('claim-document-focus');
});
}
function elementIsUnfocusedWebview(element) {
return element.tagName === 'WEBVIEW' && !webContents.fromId(element.getWebContentsId()).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);
|