diff options
| author | Cary Clark <cary@android.com> | 2009-12-02 08:59:01 -0500 |
|---|---|---|
| committer | Cary Clark <cary@android.com> | 2009-12-02 09:16:52 -0500 |
| commit | 960701032df6956d9fb640a26d315122f7b2c4be (patch) | |
| tree | cc19ce8849d9f589627b09e650c4f5c878b3d90a | |
| parent | fb77ce99397e423500cc148c206ffe89796091fb (diff) | |
| download | external_webkit-960701032df6956d9fb640a26d315122f7b2c4be.zip external_webkit-960701032df6956d9fb640a26d315122f7b2c4be.tar.gz external_webkit-960701032df6956d9fb640a26d315122f7b2c4be.tar.bz2 | |
nav to container if it wants key events
When a text field or text area (or plugin) has another navable
element completely overlaying it, allow the trackball to move
from that inner element to the outer one.
Also, allow this to get a 'second chance' -- treat the case
when one element overlays another as a spacial nav and allow
it to retry in nav find algorithms.
fixes http://b/2266756
| -rw-r--r-- | WebKit/android/nav/CachedFrame.cpp | 10 | ||||
| -rw-r--r-- | WebKit/android/nav/CachedNode.h | 2 |
2 files changed, 6 insertions, 6 deletions
diff --git a/WebKit/android/nav/CachedFrame.cpp b/WebKit/android/nav/CachedFrame.cpp index 54c295d..8a05cd6 100644 --- a/WebKit/android/nav/CachedFrame.cpp +++ b/WebKit/android/nav/CachedFrame.cpp @@ -753,7 +753,7 @@ int CachedFrame::frameNodeCommon(BestData& testData, const CachedNode* test, Bes int CachedFrame::framePartCommon(BestData& testData, const CachedNode* test, BestData* bestData, const CachedNode* cursor) const { - if (cursor && testData.mNodeBounds.contains(cursor->bounds())) { + if (cursor && testData.mNodeBounds.contains(cursor->bounds()) && !test->wantsKeyEvents()) { testData.mNode->setCondition(CachedNode::NOT_ENCLOSING_CURSOR); return REJECT_TEST; } @@ -1144,7 +1144,7 @@ bool CachedFrame::BestData::setDownDirection(const CachedHistory* history) int inNavBottom = navBounds.bottom() - mNodeBounds.bottom(); setNavInclusion(testRight - navBounds.right(), navBounds.x() - testX); bool subsumes = navBounds.height() > 0 && inOrSubsumesNav(); - if (inNavTop <= 0 && inNavBottom <= 0 && subsumes) { + if (inNavTop <= 0 && inNavBottom <= 0 && subsumes && !mNode->wantsKeyEvents()) { mNode->setCondition(CachedNode::NOT_ENCLOSING_CURSOR); return REJECT_TEST; } @@ -1184,7 +1184,7 @@ bool CachedFrame::BestData::setLeftDirection(const CachedHistory* history) int inNavLeft = mNodeBounds.x() - navBounds.x(); setNavInclusion(navBounds.y() - testY, testBottom - navBounds.bottom()); bool subsumes = navBounds.width() > 0 && inOrSubsumesNav(); - if (inNavLeft <= 0 && inNavRight <= 0 && subsumes) { + if (inNavLeft <= 0 && inNavRight <= 0 && subsumes && !mNode->wantsKeyEvents()) { mNode->setCondition(CachedNode::NOT_ENCLOSING_CURSOR); return REJECT_TEST; } @@ -1224,7 +1224,7 @@ bool CachedFrame::BestData::setRightDirection(const CachedHistory* history) int inNavRight = navBounds.right() - mNodeBounds.right(); setNavInclusion(testBottom - navBounds.bottom(), navBounds.y() - testY); bool subsumes = navBounds.width() > 0 && inOrSubsumesNav(); - if (inNavLeft <= 0 && inNavRight <= 0 && subsumes) { + if (inNavLeft <= 0 && inNavRight <= 0 && subsumes && !mNode->wantsKeyEvents()) { mNode->setCondition(CachedNode::NOT_ENCLOSING_CURSOR); return REJECT_TEST; } @@ -1264,7 +1264,7 @@ bool CachedFrame::BestData::setUpDirection(const CachedHistory* history) int inNavTop = mNodeBounds.y() - navBounds.y(); setNavInclusion(navBounds.x() - testX, testRight - navBounds.right()); bool subsumes = navBounds.height() > 0 && inOrSubsumesNav(); - if (inNavTop <= 0 && inNavBottom <= 0 && subsumes) { + if (inNavTop <= 0 && inNavBottom <= 0 && subsumes && !mNode->wantsKeyEvents()) { mNode->setCondition(CachedNode::NOT_ENCLOSING_CURSOR); return REJECT_TEST; } diff --git a/WebKit/android/nav/CachedNode.h b/WebKit/android/nav/CachedNode.h index 7374080..bfc2107 100644 --- a/WebKit/android/nav/CachedNode.h +++ b/WebKit/android/nav/CachedNode.h @@ -62,6 +62,7 @@ public: IN_UMBRA, IN_WORKING, LEFTMOST, + NOT_ENCLOSING_CURSOR, OVERLAP_OR_EDGE_FURTHER, PREFERRED, // better overlap measure SECOND_CHANCE_END = PREFERRED, // must be last in list @@ -73,7 +74,6 @@ public: HIGHER_TAB_INDEX, IN_CURSOR, IN_CURSOR_CHILDREN, - NOT_ENCLOSING_CURSOR, NOT_CURSOR_NODE, OUTSIDE_OF_BEST, // containership OUTSIDE_OF_ORIGINAL, // containership |
