Release Vulpes OS 2.7-preview.22
This commit is contained in:
parent
200d1fb235
commit
a138f97877
294 changed files with 515786 additions and 187 deletions
29
host/actors/WebInputChild.sys.mjs
Normal file
29
host/actors/WebInputChild.sys.mjs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
import {InputEditor} from 'resource://vulpes/services/input-editor.mjs';
|
||||
|
||||
// Web pages may edit their focused field, but receive no Gaia service bridge.
|
||||
export class WebInputChild extends JSWindowActorChild {
|
||||
handleEvent(event) {
|
||||
if (!Services.cpmm.sharedData.get('vulpes:native-input') || this.editor?.editing) return;
|
||||
const contexts = Services.cpmm.sharedData.get('vulpes:host-contexts') || [];
|
||||
if (!contexts.includes(this.browsingContext.top.id)) return;
|
||||
// Standalone web views have no Firefox tabbrowser to focus their embedder.
|
||||
// Keep Gecko's picker focus checks intact by activating only a touched view.
|
||||
if (event.isTrusted && ['pointerdown','mousedown','click'].includes(event.type))
|
||||
this.sendAsyncMessage('Vulpes:WebActivate', null);
|
||||
let element = event.composedPath()[0];
|
||||
if (element?.isContentEditable) element = element.closest('[contenteditable=true]') || element;
|
||||
const editable = element?.isContentEditable || element?.localName === 'textarea' ||
|
||||
(element?.localName === 'input' && ['text','search','email','url','tel','password','number'].includes(element.type));
|
||||
if (!editable || element.disabled || element.readOnly) {
|
||||
if (event.type === 'click') this.sendAsyncMessage('Vulpes:InputFocus', null);
|
||||
return;
|
||||
}
|
||||
this.editor ||= new InputEditor(this.contentWindow);
|
||||
this.editor.focus(element);
|
||||
this.sendAsyncMessage('Vulpes:InputFocus', this.editor.state());
|
||||
}
|
||||
receiveMessage(message) {
|
||||
if (message.name !== 'Vulpes:Edit' || !this.editor) throw Error('INPUT_CONTEXT_EXPIRED');
|
||||
return this.editor.edit(message.data);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue