Changeset 12510 in webkit
- Timestamp:
- Jan 31, 2006 6:44:22 PM (18 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r12508 r12510 1 2006-01-31 Adele Peterson <adele@apple.com> 2 3 - test for http://bugzilla.opendarwin.org/show_bug.cgi?id=6862 4 Input's value doesn't get updated after typing in new text field 5 6 * fast/forms/input-changing-value-expected.txt: Added. 7 * fast/forms/input-changing-value.html: Added. 8 1 9 2006-01-31 Timothy Hatcher <timothy@apple.com> 2 10 -
trunk/WebCore/ChangeLog
r12508 r12510 1 2006-01-31 Adele Peterson <adele@apple.com> 2 3 Reviewed by Darin. 4 5 http://bugzilla.opendarwin.org/show_bug.cgi?id=6862 6 Input's value doesn't get updated after typing in new text field 7 8 Added test: 9 fast/forms/input-changing-value.html 10 11 Added an event listener for a DOMCharacterDataModifiedEvent on the inner div. 12 When we get the event, then we update the input element's value field. 13 14 There may be performance problems with this approach that we will have to 15 address before flipping the switch to use these new text fields. 16 17 * rendering/RenderTextField.cpp: 18 (WebCore::InputMutationListener::handleEvent): calls subtreeHasChanged 19 (WebCore::m_mutationListener): 20 (WebCore::RenderTextField::~RenderTextField): remove the event listener. 21 (WebCore::RenderTextField::setStyle): Remove unnecessary setStyle on text node. 22 It should inherit style from the div already. 23 (WebCore::RenderTextField::updateFromElement): add the event listener. 24 (WebCore::RenderTextField::subtreeHasChanged): updates the input element's value. 25 * rendering/RenderTextField.h: 26 (WebCore::InputMutationListener::InputMutationListener): Added. 27 (WebCore::InputMutationListener::renderTextField): Added. 28 (WebCore::InputMutationListener::setInputElement): Added. 29 1 30 2006-01-31 Antti Koivisto <koivisto@iki.fi> 2 31 -
trunk/WebCore/rendering/RenderTextField.cpp
r12376 r12510 27 27 #include "htmlnames.h" 28 28 #include "HTMLInputElementImpl.h" 29 #include "xml/dom_elementimpl.h" 30 #include "xml/EventNames.h" 31 #include "xml/dom2_eventsimpl.h" 29 32 30 33 namespace WebCore { 31 34 32 35 using namespace HTMLNames; 36 using namespace EventNames; 37 38 void InputMutationListener::handleEvent(EventImpl *event, bool isWindowEvent) 39 { 40 if (!m_renderTextField) 41 return; 42 43 if (event->type() == DOMCharacterDataModifiedEvent) 44 m_renderTextField->subtreeHasChanged(); 45 } 33 46 34 47 RenderTextField::RenderTextField(NodeImpl* node) 35 :RenderBlock(node) 48 :RenderBlock(node), m_mutationListener(new InputMutationListener(this)) 36 49 { 37 50 } … … 40 53 { 41 54 // The renderer for the div has already been destroyed by destroyLeftoverChildren 42 if (m_div) 55 if (m_div) { 56 m_div->removeEventListener(DOMCharacterDataModifiedEvent, m_mutationListener.get(), false); 43 57 m_div->detach(); 58 } 44 59 } 45 60 … … 50 65 RenderBlock* divRenderer = static_cast<RenderBlock*>(m_div->renderer()); 51 66 RenderStyle* divStyle = createDivStyle(style); 52 if (divRenderer->firstChild())53 divRenderer->firstChild()->setStyle(divStyle);54 67 divRenderer->setStyle(divStyle); 55 68 } … … 103 116 int exception = 0; 104 117 m_div->appendChild(text, exception); 118 m_div->addEventListener(DOMCharacterDataModifiedEvent, m_mutationListener.get(), false); 105 119 } 106 120 … … 153 167 } 154 168 169 void RenderTextField::subtreeHasChanged() 170 { 171 HTMLInputElementImpl* input = static_cast<HTMLInputElementImpl*>(element()); 172 if (input && m_div) 173 input->setValueFromRenderer(m_div->textContent()); 155 174 } 175 176 } -
trunk/WebCore/rendering/RenderTextField.h
r12345 r12510 21 21 #define RenderTextField_H 22 22 23 #include "dom2_events.h" 23 24 #include "render_flexbox.h" 24 25 #include "html_blockimpl.h" … … 26 27 namespace WebCore 27 28 { 29 30 class RenderTextField; 31 32 class InputMutationListener : public EventListener 33 { 34 public: 35 InputMutationListener() { m_renderTextField = 0; } 36 InputMutationListener(RenderTextField *r) { m_renderTextField = r; } 37 RenderTextField *renderTextField() const { return m_renderTextField; } 38 void setInputElement(RenderTextField *r) { m_renderTextField = r; } 39 40 virtual void handleEvent(EventListenerEvent evt, bool isWindowEvent); 41 42 private: 43 RenderTextField *m_renderTextField; 44 }; 28 45 29 46 class RenderTextField : public RenderBlock … … 47 64 void setSelectionRange(int, int); 48 65 66 void subtreeHasChanged(); 67 49 68 protected: 50 69 RefPtr<HTMLDivElementImpl> m_div; 70 RefPtr<InputMutationListener> m_mutationListener; 51 71 }; 52 72
Note: See TracChangeset
for help on using the changeset viewer.