diff options
author | Matt McCoy <mattnenterprise@yahoo.com> | 2015-03-09 18:22:44 -0400 |
---|---|---|
committer | Matt McCoy <mattnenterprise@yahoo.com> | 2015-03-17 17:05:41 -0400 |
commit | bfa4fe762b105a66f2d9647f5a763f28ebe8084c (patch) | |
tree | 85ba98c204b5c188de79d0cfaa4b2c3c9af0851c | |
parent | 7cb851dda19e3d30543c58b26ad17d82554997d8 (diff) | |
download | servo-bfa4fe762b105a66f2d9647f5a763f28ebe8084c.tar.gz servo-bfa4fe762b105a66f2d9647f5a763f28ebe8084c.zip |
#4508 Fixing issues related to dispatching input event at HTMLTextareaElement
-rw-r--r-- | components/script/dom/htmltextareaelement.rs | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/components/script/dom/htmltextareaelement.rs b/components/script/dom/htmltextareaelement.rs index 763d6aa9c64..a33de9da8ab 100644 --- a/components/script/dom/htmltextareaelement.rs +++ b/components/script/dom/htmltextareaelement.rs @@ -9,7 +9,7 @@ use dom::bindings::codegen::Bindings::EventBinding::EventMethods; use dom::bindings::codegen::Bindings::HTMLTextAreaElementBinding; use dom::bindings::codegen::Bindings::HTMLTextAreaElementBinding::HTMLTextAreaElementMethods; use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; -use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, NodeCast}; +use dom::bindings::codegen::InheritTypes::{ElementCast, EventTargetCast, HTMLElementCast, NodeCast}; use dom::bindings::codegen::InheritTypes::{HTMLTextAreaElementDerived, HTMLFieldSetElementDerived}; use dom::bindings::codegen::InheritTypes::{KeyboardEventCast, TextDerived}; use dom::bindings::global::GlobalRef; @@ -18,7 +18,7 @@ use dom::bindings::refcounted::Trusted; use dom::document::{Document, DocumentHelpers}; use dom::element::{Element, AttributeHandlers}; use dom::event::{Event, EventBubbles, EventCancelable}; -use dom::eventtarget::{EventTarget, EventTargetTypeId}; +use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId}; use dom::element::ElementTypeId; use dom::htmlelement::{HTMLElement, HTMLElementTypeId}; use dom::htmlformelement::FormControl; @@ -27,7 +27,7 @@ use dom::node::{DisabledStateHelpers, Node, NodeHelpers, NodeDamage, NodeTypeId} use dom::node::{document_from_node, window_from_node}; use textinput::{TextInput, Lines, KeyReaction}; use dom::virtualmethods::VirtualMethods; -use script_task::{ScriptMsg, Runnable}; +use script_task::{Runnable}; use util::str::DOMString; use string_cache::Atom; @@ -41,7 +41,6 @@ pub struct HTMLTextAreaElement { textinput: DOMRefCell<TextInput>, cols: Cell<u32>, rows: Cell<u32>, - // https://html.spec.whatwg.org/multipage/forms.html#concept-textarea-dirty value_changed: Cell<bool>, } @@ -187,12 +186,6 @@ impl<'a> HTMLTextAreaElementMethods for JSRef<'a, HTMLTextAreaElement> { self.textinput.borrow_mut().set_content(value); self.value_changed.set(true); - let window = window_from_node(self).root(); - let window = window.r(); - let chan = window.script_chan(); - let handler = Trusted::new(window.get_cx(), self, chan.clone()); - chan.send(ScriptMsg::RunnableMsg(box handler)); - self.force_relayout(); } } @@ -234,7 +227,9 @@ impl<'a> PrivateHTMLTextAreaElementHelpers for JSRef<'a, HTMLTextAreaElement> { "input".to_owned(), EventBubbles::DoesNotBubble, EventCancelable::NotCancelable).root(); - self.handle_event(event.r()); + + let target: JSRef<EventTarget> = EventTargetCast::from_ref(self); + target.dispatch_event(event.r()); } } @@ -366,9 +361,13 @@ impl<'a> FormControl<'a> for JSRef<'a, HTMLTextAreaElement> { } } -impl Runnable for Trusted<HTMLTextAreaElement> { - fn handler(self: Box<Trusted<HTMLTextAreaElement>>) { - let target = self.to_temporary().root(); +pub struct TrustedHTMLTextAreaElement { + element: Trusted<HTMLTextAreaElement>, +} + +impl Runnable for TrustedHTMLTextAreaElement { + fn handler(self: Box<TrustedHTMLTextAreaElement>) { + let target = self.element.to_temporary().root(); target.r().dispatch_change_event(); } }
\ No newline at end of file |