Changeset 12510 in webkit


Ignore:
Timestamp:
Jan 31, 2006 6:44:22 PM (18 years ago)
Author:
adele
Message:

LayoutTests:

  • fast/forms/input-changing-value-expected.txt: Added.
  • fast/forms/input-changing-value.html: Added.

WebCore:

Reviewed by Darin.

http://bugzilla.opendarwin.org/show_bug.cgi?id=6862
Input's value doesn't get updated after typing in new text field

Added test:
fast/forms/input-changing-value.html

Added an event listener for a DOMCharacterDataModifiedEvent on the inner div.
When we get the event, then we update the input element's value field.

There may be performance problems with this approach that we will have to
address before flipping the switch to use these new text fields.

  • rendering/RenderTextField.cpp: (WebCore::InputMutationListener::handleEvent): calls subtreeHasChanged (WebCore::m_mutationListener): (WebCore::RenderTextField::~RenderTextField): remove the event listener. (WebCore::RenderTextField::setStyle): Remove unnecessary setStyle on text node. It should inherit style from the div already. (WebCore::RenderTextField::updateFromElement): add the event listener. (WebCore::RenderTextField::subtreeHasChanged): updates the input element's value.
  • rendering/RenderTextField.h: (WebCore::InputMutationListener::InputMutationListener): Added. (WebCore::InputMutationListener::renderTextField): Added. (WebCore::InputMutationListener::setInputElement): Added.
Location:
trunk
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r12508 r12510  
     12006-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
    192006-01-31  Timothy Hatcher  <timothy@apple.com>
    210
  • trunk/WebCore/ChangeLog

    r12508 r12510  
     12006-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
    1302006-01-31  Antti Koivisto <koivisto@iki.fi>
    231
  • trunk/WebCore/rendering/RenderTextField.cpp

    r12376 r12510  
    2727#include "htmlnames.h"
    2828#include "HTMLInputElementImpl.h"
     29#include "xml/dom_elementimpl.h"
     30#include "xml/EventNames.h"
     31#include "xml/dom2_eventsimpl.h"
    2932
    3033namespace WebCore {
    3134
    3235using namespace HTMLNames;
     36using namespace EventNames;
     37
     38void InputMutationListener::handleEvent(EventImpl *event, bool isWindowEvent)
     39{
     40    if (!m_renderTextField)
     41        return;
     42   
     43    if (event->type() == DOMCharacterDataModifiedEvent)
     44        m_renderTextField->subtreeHasChanged();
     45}
    3346
    3447RenderTextField::RenderTextField(NodeImpl* node)
    35 :RenderBlock(node)
     48:RenderBlock(node), m_mutationListener(new InputMutationListener(this))
    3649{
    3750}
     
    4053{
    4154    // 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);
    4357        m_div->detach();
     58    }
    4459}
    4560
     
    5065        RenderBlock* divRenderer = static_cast<RenderBlock*>(m_div->renderer());
    5166        RenderStyle* divStyle = createDivStyle(style);
    52         if (divRenderer->firstChild())
    53             divRenderer->firstChild()->setStyle(divStyle);
    5467        divRenderer->setStyle(divStyle);
    5568    }
     
    103116            int exception = 0;
    104117            m_div->appendChild(text, exception);
     118            m_div->addEventListener(DOMCharacterDataModifiedEvent, m_mutationListener.get(), false);
    105119        }
    106120       
     
    153167}
    154168
     169void RenderTextField::subtreeHasChanged()
     170{
     171    HTMLInputElementImpl* input = static_cast<HTMLInputElementImpl*>(element());
     172    if (input && m_div)
     173        input->setValueFromRenderer(m_div->textContent());
    155174}
     175
     176}
  • trunk/WebCore/rendering/RenderTextField.h

    r12345 r12510  
    2121#define RenderTextField_H
    2222
     23#include "dom2_events.h"
    2324#include "render_flexbox.h"
    2425#include "html_blockimpl.h"
     
    2627namespace WebCore
    2728{
     29
     30class RenderTextField;
     31
     32class InputMutationListener : public EventListener
     33{
     34public:
     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   
     42private:
     43    RenderTextField *m_renderTextField;
     44};
    2845
    2946class RenderTextField : public RenderBlock
     
    4764    void setSelectionRange(int, int);
    4865
     66    void subtreeHasChanged();
     67
    4968protected:
    5069    RefPtr<HTMLDivElementImpl> m_div;
     70    RefPtr<InputMutationListener> m_mutationListener;
    5171};
    5272
Note: See TracChangeset for help on using the changeset viewer.