mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Dispatch composition events in JS. Insert characters from composition events to text input. CompositionEvents currently can only be created by WebDriver and not by embedders.
78 lines
2.2 KiB
Rust
78 lines
2.2 KiB
Rust
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
use crate::dom::bindings::codegen::Bindings::CompositionEventBinding::{
|
|
self, CompositionEventMethods,
|
|
};
|
|
use crate::dom::bindings::codegen::Bindings::UIEventBinding::UIEventBinding::UIEventMethods;
|
|
use crate::dom::bindings::error::Fallible;
|
|
use crate::dom::bindings::reflector::reflect_dom_object;
|
|
use crate::dom::bindings::root::{DomRoot, RootedReference};
|
|
use crate::dom::bindings::str::DOMString;
|
|
use crate::dom::uievent::UIEvent;
|
|
use crate::dom::window::Window;
|
|
use dom_struct::dom_struct;
|
|
|
|
#[dom_struct]
|
|
pub struct CompositionEvent {
|
|
uievent: UIEvent,
|
|
data: DOMString,
|
|
}
|
|
|
|
impl CompositionEvent {
|
|
pub fn new(
|
|
window: &Window,
|
|
type_: DOMString,
|
|
can_bubble: bool,
|
|
cancelable: bool,
|
|
view: Option<&Window>,
|
|
detail: i32,
|
|
data: DOMString,
|
|
) -> DomRoot<CompositionEvent> {
|
|
let ev = reflect_dom_object(
|
|
Box::new(CompositionEvent {
|
|
uievent: UIEvent::new_inherited(),
|
|
data: data,
|
|
}),
|
|
window,
|
|
CompositionEventBinding::Wrap,
|
|
);
|
|
ev.uievent
|
|
.InitUIEvent(type_, can_bubble, cancelable, view, detail);
|
|
ev
|
|
}
|
|
|
|
pub fn Constructor(
|
|
window: &Window,
|
|
type_: DOMString,
|
|
init: &CompositionEventBinding::CompositionEventInit,
|
|
) -> Fallible<DomRoot<CompositionEvent>> {
|
|
let event = CompositionEvent::new(
|
|
window,
|
|
type_,
|
|
init.parent.parent.bubbles,
|
|
init.parent.parent.cancelable,
|
|
init.parent.view.r(),
|
|
init.parent.detail,
|
|
init.data.clone(),
|
|
);
|
|
Ok(event)
|
|
}
|
|
|
|
pub fn data(&self) -> &str {
|
|
&*self.data
|
|
}
|
|
}
|
|
|
|
impl CompositionEventMethods for CompositionEvent {
|
|
// https://w3c.github.io/uievents/#dom-compositionevent-data
|
|
fn Data(&self) -> DOMString {
|
|
self.data.clone()
|
|
}
|
|
|
|
// https://dom.spec.whatwg.org/#dom-event-istrusted
|
|
fn IsTrusted(&self) -> bool {
|
|
self.uievent.IsTrusted()
|
|
}
|
|
}
|