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

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

Issue 21130005: Trigger spell check/remove markers if spell checker gets enabled/disabled. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: copy&paste bug fixed 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/SpellChecker.cpp
diff --git a/Source/core/editing/SpellChecker.cpp b/Source/core/editing/SpellChecker.cpp
index 97c1fd81bc82e9ec410b67c50c2872dbc4045c64..776b38a9abebb2dc6af918478f8f5e968ff461db 100644
--- a/Source/core/editing/SpellChecker.cpp
+++ b/Source/core/editing/SpellChecker.cpp
@@ -46,12 +46,14 @@ SpellCheckRequest::SpellCheckRequest(
TextCheckingTypeMask mask,
TextCheckingProcessType processType,
const Vector<uint32_t>& documentMarkersInRange,
- const Vector<unsigned>& documentMarkerOffsets)
+ const Vector<unsigned>& documentMarkerOffsets,
+ int requestNo)
: m_checker(0)
, m_checkingRange(checkingRange)
, m_paragraphRange(paragraphRange)
, m_rootEditableElement(m_checkingRange->startContainer()->rootEditableElement())
, m_requestData(unrequestedTextCheckingSequence, text, mask, processType, documentMarkersInRange, documentMarkerOffsets)
+ , m_requestNo(requestNo)
{
}
@@ -62,6 +64,12 @@ SpellCheckRequest::~SpellCheckRequest()
// static
PassRefPtr<SpellCheckRequest> SpellCheckRequest::create(TextCheckingTypeMask textCheckingOptions, TextCheckingProcessType processType, PassRefPtr<Range> checkingRange, PassRefPtr<Range> paragraphRange)
{
+ return SpellCheckRequest::create(textCheckingOptions, processType, checkingRange, paragraphRange, 0);
+}
+
+// static
+PassRefPtr<SpellCheckRequest> SpellCheckRequest::create(TextCheckingTypeMask textCheckingOptions, TextCheckingProcessType processType, PassRefPtr<Range> checkingRange, PassRefPtr<Range> paragraphRange, int requestNo)
+{
ASSERT(checkingRange);
ASSERT(paragraphRange);
@@ -77,7 +85,7 @@ PassRefPtr<SpellCheckRequest> SpellCheckRequest::create(TextCheckingTypeMask tex
offsets[i] = markers[i]->startOffset();
}
- return adoptRef(new SpellCheckRequest(checkingRange, paragraphRange, text, textCheckingOptions, processType, hashes, offsets));
+ return adoptRef(new SpellCheckRequest(checkingRange, paragraphRange, text, textCheckingOptions, processType, hashes, offsets, requestNo));
}
const TextCheckingRequestData& SpellCheckRequest::data() const
@@ -207,13 +215,21 @@ void SpellChecker::invokeRequest(PassRefPtr<SpellCheckRequest> request)
void SpellChecker::enqueueRequest(PassRefPtr<SpellCheckRequest> request)
{
ASSERT(request);
+ bool continuation = false;
+ if (m_requestQueue.size() > 0) {
+ RefPtr<SpellCheckRequest> lastRequest = m_requestQueue.last();
+ continuation = request->rootEditableElement() == lastRequest->rootEditableElement()
+ && request->requestNo() == lastRequest->requestNo() + 1;
+ }
- for (RequestQueue::iterator it = m_requestQueue.begin(); it != m_requestQueue.end(); ++it) {
- if (request->rootEditableElement() != (*it)->rootEditableElement())
- continue;
+ if (!continuation) {
+ for (RequestQueue::iterator it = m_requestQueue.begin(); it != m_requestQueue.end(); ++it) {
+ if (request->rootEditableElement() != (*it)->rootEditableElement())
+ continue;
- *it = request;
- return;
+ *it = request;
+ return;
+ }
}
m_requestQueue.append(request);

Powered by Google App Engine
This is Rietveld 408576698