diff options
Diffstat (limited to 'WebCore/page/FocusController.cpp')
-rw-r--r-- | WebCore/page/FocusController.cpp | 21 |
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(); } |