diff options
Diffstat (limited to 'WebCore/dom/PositionIterator.cpp')
| -rw-r--r-- | WebCore/dom/PositionIterator.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/WebCore/dom/PositionIterator.cpp b/WebCore/dom/PositionIterator.cpp index a029b5e..f5b65f5 100644 --- a/WebCore/dom/PositionIterator.cpp +++ b/WebCore/dom/PositionIterator.cpp @@ -38,7 +38,7 @@ PositionIterator::operator Position() const { if (m_nodeAfterPositionInAnchor) { ASSERT(m_nodeAfterPositionInAnchor->parentNode() == m_anchorNode); - return positionBeforeNode(m_nodeAfterPositionInAnchor); + return positionInParentBeforeNode(m_nodeAfterPositionInAnchor); } if (m_anchorNode->hasChildNodes()) return lastDeepEditingPositionForNode(m_anchorNode); @@ -156,10 +156,14 @@ bool PositionIterator::isCandidate() const if (isTableElement(m_anchorNode) || editingIgnoresContent(m_anchorNode)) return (atStartOfNode() || atEndOfNode()) && !Position::nodeIsUserSelectNone(m_anchorNode->parent()); - if (!m_anchorNode->hasTagName(htmlTag) && renderer->isBlockFlow() && !Position::hasRenderedNonAnonymousDescendantsWithHeight(renderer) && - (toRenderBlock(renderer)->height() || m_anchorNode->hasTagName(bodyTag))) - return atStartOfNode() && !Position::nodeIsUserSelectNone(m_anchorNode); - + if (!m_anchorNode->hasTagName(htmlTag) && renderer->isBlockFlow()) { + if (toRenderBlock(renderer)->height() || m_anchorNode->hasTagName(bodyTag)) { + if (!Position::hasRenderedNonAnonymousDescendantsWithHeight(renderer)) + return atStartOfNode() && !Position::nodeIsUserSelectNone(m_anchorNode); + return m_anchorNode->isContentEditable() && !Position::nodeIsUserSelectNone(m_anchorNode) && Position(*this).atEditingBoundary(); + } + } + return false; } |
