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

Unified Diff: Source/core/editing/Editor.cpp

Issue 21694005: Spell check whole content of an editable element when it gets focused. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: async test added. Sync suffixed with -sync Created 7 years, 4 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: Source/core/editing/Editor.cpp
diff --git a/Source/core/editing/Editor.cpp b/Source/core/editing/Editor.cpp
index ed04fdbd82b534fa325a303580e490b50fd336af..50d59502400c19322801dadd76414cedecc04ffc 100644
--- a/Source/core/editing/Editor.cpp
+++ b/Source/core/editing/Editor.cpp
@@ -1017,6 +1017,8 @@ bool Editor::isContinuousSpellCheckingEnabled() const
void Editor::toggleContinuousSpellChecking()
{
client().toggleContinuousSpellChecking();
+ if (!isContinuousSpellCheckingEnabled())
+ m_editablesSpellCheckedOnFocus.clear();
}
bool Editor::isGrammarCheckingEnabled()
@@ -1059,12 +1061,45 @@ void Editor::redo()
client().redo();
}
-void Editor::didBeginEditing()
+void Editor::elementDidBeginEditing(Element* element)
+{
+ if (isContinuousSpellCheckingEnabled() && unifiedTextCheckerEnabled()) {
+ // This could be called for textareas, text fields and contenteditables.
+ // Markers from text fields are cleared on blur so text fields have to be spell cheked on each focus as opposed
+ // to textareas and contenteditables which should be spell checked on the first focus only.
+ // This is also why text fields are not put into m_editablesSpellCheckedOnFocus.
+ // For textareas HTMLTextFormControlElement is put into m_editablesSpellCheckedOnFocus but spell checking
+ // is performed on its inner text element (the latter also applies to text fields). For contenteditables
+ // the passed in element is put into m_editablesSpellCheckedOnFocus (it's the root editable element).
tony 2013/08/20 22:10:39 This style of comment that describes behavior is b
+ bool isTextField = false;
+ HTMLTextFormControlElement* enclosingHTMLTextFormControlElement = 0;
+ if (!isHTMLTextFormControlElement(element))
+ enclosingHTMLTextFormControlElement = enclosingTextFormControl(firstPositionInNode(element));
+ element = enclosingHTMLTextFormControlElement ? enclosingHTMLTextFormControlElement : element;
+ Element* parent = element;
+ if (isHTMLTextFormControlElement(element)) {
+ HTMLTextFormControlElement* textControl = toHTMLTextFormControlElement(element);
+ parent = textControl;
+ element = textControl->innerTextElement();
+ isTextField = textControl->hasTagName(inputTag) && toHTMLInputElement(textControl)->isTextField();
+ }
+
+ if (isTextField || !m_editablesSpellCheckedOnFocus.contains(parent)) {
+ VisibleSelection selection = VisibleSelection::selectionFromContentsOfNode(element);
+ markMisspellingsAndBadGrammar(selection);
+ if (!isTextField)
+ m_editablesSpellCheckedOnFocus.append(parent);
tony 2013/08/20 22:10:39 You could put a 'why' comment here: We always rech
+ }
+ }
+}
+
+void Editor::didBeginEditing(Element* rootEditableElement)
{
+ elementDidBeginEditing(rootEditableElement);
client().didBeginEditing();
}
-void Editor::didEndEditing()
+void Editor::didEndEditing(Element*)
{
client().didEndEditing();
}
@@ -1867,14 +1902,9 @@ void Editor::computeAndSetTypingStyle(StylePropertySet* style, EditAction editin
m_frame->selection()->setTypingStyle(typingStyle);
}
-
-void Editor::textFieldDidBeginEditing(Element* e)
+void Editor::textAreaOrTextFieldDidBeginEditing(Element* e)
{
- if (isContinuousSpellCheckingEnabled()) {
- Element* element = toHTMLTextFormControlElement(e)->innerTextElement();
- VisibleSelection selection = VisibleSelection::selectionFromContentsOfNode(element);
- markMisspellingsAndBadGrammar(selection);
- }
+ elementDidBeginEditing(e);
}
void Editor::textFieldDidEndEditing(Element* e)

Powered by Google App Engine
This is Rietveld 408576698