Changeset 41576 in webkit


Ignore:
Timestamp:
Mar 10, 2009 10:43:58 PM (15 years ago)
Author:
Simon Fraser
Message:

2009-03-10 Simon Fraser <Simon Fraser>

Reviewed by Darin Adler

https://bugs.webkit.org/show_bug.cgi?id=24503

Fix hit testing of absolutely positioned single line text controls by
ensuring that we set result.innerNode() correctly. If the hit node is
a descendant of the inner text element or if it is the <input> itself,
then we say we hit the innerTextElement.

Rename hitInnerTextBlock() to hitInnerTextElement() to match the
'innerTextElement' terminology used elsewhere.

Assert that if renderer()->hitTest() returns false, no-one set
result.innerNode().

Test: fast/forms/search-abs-pos-cancel-button.html

  • rendering/RenderLayer.cpp: (WebCore::RenderLayer::hitTestContents):
  • rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::hitInnerTextElement):
  • rendering/RenderTextControl.h:
  • rendering/RenderTextControlMultiLine.cpp: (WebCore::RenderTextControlMultiLine::nodeAtPoint):
  • rendering/RenderTextControlSingleLine.cpp: (WebCore::RenderTextControlSingleLine::nodeAtPoint):
Location:
trunk
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r41569 r41576  
     12009-03-10  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Reviewed by Darin Adler
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=24503
     6       
     7        Test for hitting the cancel button of an absolutely-positioned form
     8        control.
     9
     10        * fast/forms/search-abs-pos-cancel-button-expected.txt: Added.
     11        * fast/forms/search-abs-pos-cancel-button.html: Added.
     12
    1132009-03-10  Beth Dakin  <bdakin@apple.com>
    214
  • trunk/WebCore/ChangeLog

    r41573 r41576  
     12009-03-10  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Reviewed by Darin Adler
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=24503
     6       
     7        Fix hit testing of absolutely positioned single line text controls by
     8        ensuring that we set result.innerNode() correctly. If the hit node is
     9        a descendant of the inner text element or if it is the <input> itself,
     10        then we say we hit the innerTextElement.
     11       
     12        Rename hitInnerTextBlock() to hitInnerTextElement() to match the
     13        'innerTextElement' terminology used elsewhere.
     14       
     15        Assert that if renderer()->hitTest() returns false, no-one set
     16        result.innerNode().
     17
     18        Test: fast/forms/search-abs-pos-cancel-button.html
     19
     20        * rendering/RenderLayer.cpp:
     21        (WebCore::RenderLayer::hitTestContents):
     22        * rendering/RenderTextControl.cpp:
     23        (WebCore::RenderTextControl::hitInnerTextElement):
     24        * rendering/RenderTextControl.h:
     25        * rendering/RenderTextControlMultiLine.cpp:
     26        (WebCore::RenderTextControlMultiLine::nodeAtPoint):
     27        * rendering/RenderTextControlSingleLine.cpp:
     28        (WebCore::RenderTextControlSingleLine::nodeAtPoint):
     29
    1302009-03-10  Antti Koivisto  <antti@apple.com>
    231
  • trunk/WebCore/rendering/RenderLayer.cpp

    r41546 r41576  
    24012401                            layerBounds.x() - renderBoxX(),
    24022402                            layerBounds.y() - renderBoxY(),
    2403                             hitTestFilter))
     2403                            hitTestFilter)) {
     2404        // It's wrong to set innerNode, but then claim that you didn't hit anything.
     2405        ASSERT(!result.innerNode());
    24042406        return false;
     2407    }
    24052408
    24062409    // For positioned generated content, we might still not have a
  • trunk/WebCore/rendering/RenderTextControl.cpp

    r41553 r41576  
    452452}
    453453
    454 void RenderTextControl::hitInnerTextBlock(HitTestResult& result, int xPos, int yPos, int tx, int ty)
     454void RenderTextControl::hitInnerTextElement(HitTestResult& result, int xPos, int yPos, int tx, int ty)
    455455{
    456456    result.setInnerNode(m_innerText.get());
  • trunk/WebCore/rendering/RenderTextControl.h

    r40984 r41576  
    9393
    9494    void createSubtreeIfNeeded(TextControlInnerElement* innerBlock);
    95     void hitInnerTextBlock(HitTestResult&, int x, int y, int tx, int ty);
     95    void hitInnerTextElement(HitTestResult&, int x, int y, int tx, int ty);
    9696    void forwardEvent(Event*);
    9797
  • trunk/WebCore/rendering/RenderTextControlMultiLine.cpp

    r41385 r41576  
    8585
    8686    if (result.innerNode() == node())
    87         hitInnerTextBlock(result, x, y, tx, ty);
     87        hitInnerTextElement(result, x, y, tx, ty);
    8888
    8989    return true;
  • trunk/WebCore/rendering/RenderTextControlSingleLine.cpp

    r41379 r41576  
    271271        return false;
    272272
    273     if (result.innerNode() != node() && result.innerNode() != innerTextElement())
    274         return false;
    275 
    276     hitInnerTextBlock(result, xPos, yPos, tx, ty);
    277 
    278     if (!m_innerBlock)
     273    // If we hit a node inside the inner text element, say that we hit that element,
     274    // and if we hit our node (e.g. we're over the border or padding), also say that we hit the
     275    // inner text element so that it gains focus.
     276    if (result.innerNode()->isDescendantOf(innerTextElement()) || result.innerNode() == node())
     277        hitInnerTextElement(result, xPos, yPos, tx, ty);
     278
     279    // If we're not a search field, or we already found the results or cancel buttons, we're done.
     280    if (!m_innerBlock || result.innerNode() == m_resultsButton || result.innerNode() == m_cancelButton)
    279281        return true;
    280282
Note: See TracChangeset for help on using the changeset viewer.