summaryrefslogtreecommitdiffstats
path: root/WebCore/page/FocusController.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/page/FocusController.cpp')
-rw-r--r--WebCore/page/FocusController.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/WebCore/page/FocusController.cpp b/WebCore/page/FocusController.cpp
index 372cb32..804341d 100644
--- a/WebCore/page/FocusController.cpp
+++ b/WebCore/page/FocusController.cpp
@@ -511,14 +511,19 @@ static void clearSelectionIfNeeded(Frame* oldFocusedFrame, Frame* newFocusedFram
if (selectionStartNode == newFocusedNode || selectionStartNode->isDescendantOf(newFocusedNode) || selectionStartNode->shadowAncestorNode() == newFocusedNode)
return;
- if (Node* mousePressNode = newFocusedFrame->eventHandler()->mousePressNode())
- if (mousePressNode->renderer() && !mousePressNode->canStartSelection())
- if (Node* root = s->rootEditableElement())
- if (Node* shadowAncestorNode = root->shadowAncestorNode())
- // Don't do this for textareas and text fields, when they lose focus their selections should be cleared
- // and then restored when they regain focus, to match other browsers.
- if (!shadowAncestorNode->hasTagName(inputTag) && !shadowAncestorNode->hasTagName(textareaTag))
- return;
+ if (Node* mousePressNode = newFocusedFrame->eventHandler()->mousePressNode()) {
+ if (mousePressNode->renderer() && !mousePressNode->canStartSelection()) {
+ // Don't clear the selection for contentEditable elements, but do clear it for input and textarea. See bug 38696.
+ Node * root = s->rootEditableElement();
+ if (!root)
+ return;
+
+ if (Node* shadowAncestorNode = root->shadowAncestorNode()) {
+ if (!shadowAncestorNode->hasTagName(inputTag) && !shadowAncestorNode->hasTagName(textareaTag))
+ return;
+ }
+ }
+ }
s->clear();
}