diff options
author | Ben Murdoch <benm@google.com> | 2011-07-13 10:14:36 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-07-13 11:03:14 +0100 |
commit | d0147a863b872ecaa451ab0dce2a348760e99e2c (patch) | |
tree | b4819830b7ab03f384ed8ab83734ac0f46193263 /Source/WebCore/rendering | |
parent | 65b45b34343dc5d5b9dbeda52e9de428e146c8f7 (diff) | |
download | external_webkit-d0147a863b872ecaa451ab0dce2a348760e99e2c.zip external_webkit-d0147a863b872ecaa451ab0dce2a348760e99e2c.tar.gz external_webkit-d0147a863b872ecaa451ab0dce2a348760e99e2c.tar.bz2 |
Merge WebKit at branches/chromium/742 r89068: Initial merge by Git.
Take us to top of Chrome 12 release branch (12.0.742.130)
Change-Id: I4408a97e343a118cf4a1bb9d71367bcc2c16ae48
Diffstat (limited to 'Source/WebCore/rendering')
-rw-r--r-- | Source/WebCore/rendering/RenderTextControl.cpp | 32 | ||||
-rw-r--r-- | Source/WebCore/rendering/RenderTextControl.h | 4 |
2 files changed, 23 insertions, 13 deletions
diff --git a/Source/WebCore/rendering/RenderTextControl.cpp b/Source/WebCore/rendering/RenderTextControl.cpp index 8149f6c..0862df3 100644 --- a/Source/WebCore/rendering/RenderTextControl.cpp +++ b/Source/WebCore/rendering/RenderTextControl.cpp @@ -205,7 +205,12 @@ int RenderTextControl::selectionStart() const Frame* frame = this->frame(); if (!frame) return 0; - return indexForVisiblePosition(frame->selection()->start()); + + HTMLElement* innerText = innerTextElement(); + // Do not call innerTextElement() in the function arguments as creating a VisiblePosition + // from frame->selection->start() can blow us from underneath. Also, function ordering is + // usually dependent on the compiler. + return RenderTextControl::indexForVisiblePosition(innerText, frame->selection()->start()); } int RenderTextControl::selectionEnd() const @@ -213,7 +218,12 @@ int RenderTextControl::selectionEnd() const Frame* frame = this->frame(); if (!frame) return 0; - return indexForVisiblePosition(frame->selection()->end()); + + HTMLElement* innerText = innerTextElement(); + // Do not call innerTextElement() in the function arguments as creating a VisiblePosition + // from frame->selection->end() can blow us from underneath. Also, function ordering is + // usually dependent on the compiler. + return RenderTextControl::indexForVisiblePosition(innerText, frame->selection()->end()); } bool RenderTextControl::hasVisibleTextArea() const @@ -256,15 +266,15 @@ void setSelectionRange(Node* node, int start, int end) frame->selection()->setSelection(newSelection); } -bool RenderTextControl::isSelectableElement(Node* node) const +bool RenderTextControl::isSelectableElement(HTMLElement* innerText, Node* node) { - if (!node || !m_innerText) + if (!node || !innerText) return false; - - if (node->rootEditableElement() == m_innerText) + + if (node->rootEditableElement() == innerText) return true; - if (!m_innerText->contains(node)) + if (!innerText->contains(node)) return false; Node* shadowAncestor = node->shadowAncestorNode(); @@ -334,14 +344,14 @@ VisiblePosition RenderTextControl::visiblePositionForIndex(int index) const return VisiblePosition(Position(endContainer, endOffset, Position::PositionIsOffsetInAnchor), UPSTREAM); } -int RenderTextControl::indexForVisiblePosition(const VisiblePosition& pos) const +int RenderTextControl::indexForVisiblePosition(HTMLElement* innerTextElement, const VisiblePosition& pos) { Position indexPosition = pos.deepEquivalent(); - if (!isSelectableElement(indexPosition.deprecatedNode())) + if (!RenderTextControl::isSelectableElement(innerTextElement, indexPosition.deprecatedNode())) return 0; ExceptionCode ec = 0; - RefPtr<Range> range = Range::create(document()); - range->setStart(m_innerText.get(), 0, ec); + RefPtr<Range> range = Range::create(indexPosition.document()); + range->setStart(innerTextElement, 0, ec); ASSERT(!ec); range->setEnd(indexPosition.deprecatedNode(), indexPosition.deprecatedEditingOffset(), ec); ASSERT(!ec); diff --git a/Source/WebCore/rendering/RenderTextControl.h b/Source/WebCore/rendering/RenderTextControl.h index 0c30ed6..78b295b 100644 --- a/Source/WebCore/rendering/RenderTextControl.h +++ b/Source/WebCore/rendering/RenderTextControl.h @@ -49,7 +49,7 @@ public: void selectionChanged(bool userTriggered); VisiblePosition visiblePositionForIndex(int index) const; - int indexForVisiblePosition(const VisiblePosition&) const; + static int indexForVisiblePosition(HTMLElement*, const VisiblePosition&); void updatePlaceholderVisibility(bool, bool); @@ -104,7 +104,7 @@ private: bool hasVisibleTextArea() const; friend void setSelectionRange(Node*, int start, int end); - bool isSelectableElement(Node*) const; + static bool isSelectableElement(HTMLElement*, Node*); virtual int textBlockInsetLeft() const = 0; virtual int textBlockInsetRight() const = 0; |