Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(174)

Unified Diff: third_party/WebKit/Source/core/page/FocusController.cpp

Issue 2616623002: Do not send redundant selectionchange-events (decouple focus) (Closed)
Patch Set: Move isSelectionInDocument() and selectionHasFocus() to EditingUtilities Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/page/FocusController.cpp
diff --git a/third_party/WebKit/Source/core/page/FocusController.cpp b/third_party/WebKit/Source/core/page/FocusController.cpp
index 110d8bf12a8de8c3fa4cf6a7c0088d3b2008b582..0550ba88b91978288ece59c458b25b3d5daa756c 100644
--- a/third_party/WebKit/Source/core/page/FocusController.cpp
+++ b/third_party/WebKit/Source/core/page/FocusController.cpp
@@ -1040,6 +1040,10 @@ bool FocusController::advanceFocusInDocumentOrder(
setFocusedFrame(newDocument.frame());
+ if (!element->isTextControl() && !hasEditableStyle(*element->toNode())) {
+ // TODO(blink-editing): Remove this clear(), crbug.com/692898.
yosin_UTC9 2017/03/21 06:49:59 nit: s/blink-editing/editing-dev/
hugoh_UTC2 2017/03/22 02:54:47 Done.
+ focusedFrame()->selection().clear();
+ }
element->focus(
FocusParams(SelectionBehaviorOnFocus::Reset, type, sourceCapabilities));
return true;
@@ -1066,35 +1070,6 @@ static bool relinquishesEditingFocus(const Element& element) {
return element.document().frame() && rootEditableElement(element);
}
-static void clearSelectionIfNeeded(LocalFrame* oldFocusedFrame,
- LocalFrame* newFocusedFrame,
- Element* newFocusedElement) {
- if (!oldFocusedFrame || !newFocusedFrame)
- return;
-
- if (oldFocusedFrame->document() != newFocusedFrame->document())
- return;
-
- FrameSelection& selection = oldFocusedFrame->selection();
- const SelectionInDOMTree& selectionInDOMTree = selection.selectionInDOMTree();
- if (selectionInDOMTree.isNone())
- return;
-
- Node* selectionStartNode = selectionInDOMTree.base().anchorNode();
- if (selectionStartNode == newFocusedElement ||
- selectionStartNode->isDescendantOf(newFocusedElement))
- return;
-
- if (!enclosingTextControl(selectionStartNode))
- return;
-
- if (selectionStartNode->isInShadowTree() &&
- selectionStartNode->ownerShadowHost() == newFocusedElement)
- return;
-
- selection.clear();
-}
-
bool FocusController::setFocusedElement(Element* element,
Frame* newFocusedFrame) {
return setFocusedElement(
@@ -1131,10 +1106,6 @@ bool FocusController::setFocusedElement(Element* element,
newDocument->focusedElement() == element)
return true;
- if (newFocusedFrame && newFocusedFrame->isLocalFrame())
- clearSelectionIfNeeded(oldFocusedFrame, toLocalFrame(newFocusedFrame),
- element);
-
if (oldDocument && oldDocument != newDocument)
oldDocument->clearFocusedElement();
@@ -1351,6 +1322,10 @@ bool FocusController::advanceFocusDirectionallyInContainer(
Element* element = toElement(focusCandidate.focusableNode);
DCHECK(element);
+ if (!element->isTextControl() && !hasEditableStyle(*element->toNode())) {
+ // TODO(blink-editing): Remove this clear(), crbug.com/692898.
+ focusedFrame()->selection().clear();
+ }
element->focus(FocusParams(SelectionBehaviorOnFocus::Reset, type, nullptr));
return true;
}

Powered by Google App Engine
This is Rietveld 408576698