<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[149627] trunk/Source/WebKit/blackberry</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/149627">149627</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2013-05-06 12:36:29 -0700 (Mon, 06 May 2013)</dd>
</dl>

<h3>Log Message</h3>
<pre>[BlackBerry] Do not spellcheck when composition is active.
https://bugs.webkit.org/show_bug.cgi?id=115562

Patch by Nima Ghanavatian &lt;nghanavatian@blackberry.com&gt; on 2013-05-06
Reviewed by Rob Buis.

Internally reviewed by Mike Fenton.

PR331344
Typing can trigger rechecking since layout changes. Ensure
extra work is only done when we need it, and that it won't
be triggered when composition is active. If the user hasn't
finished a word yet, it is likely future key events will be
arriving, so checking the string at this point is extraneous.

* WebKitSupport/InputHandler.cpp:
(BlackBerry::WebKit::InputHandler::requestCheckingOfString):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKitblackberryApiWebPagecpp">trunk/Source/WebKit/blackberry/Api/WebPage.cpp</a></li>
<li><a href="#trunkSourceWebKitblackberryChangeLog">trunk/Source/WebKit/blackberry/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitblackberryWebKitSupportInputHandlercpp">trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp</a></li>
<li><a href="#trunkSourceWebKitblackberryWebKitSupportInputHandlerh">trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKitblackberryApiWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/blackberry/Api/WebPage.cpp (149626 => 149627)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/blackberry/Api/WebPage.cpp        2013-05-06 19:31:37 UTC (rev 149626)
+++ trunk/Source/WebKit/blackberry/Api/WebPage.cpp        2013-05-06 19:36:29 UTC (rev 149627)
</span><span class="lines">@@ -1557,8 +1557,7 @@
</span><span class="cx"> void WebPagePrivate::layoutFinished()
</span><span class="cx"> {
</span><span class="cx">     // If a layout change has occurred, we need to invalidate any current spellcheck requests and trigger a new run.
</span><del>-    m_inputHandler-&gt;stopPendingSpellCheckRequests();
-    m_inputHandler-&gt;spellCheckTextBlock();
</del><ins>+    m_inputHandler-&gt;stopPendingSpellCheckRequests(true /* isRestartRequired */);
</ins><span class="cx"> 
</span><span class="cx">     if (!m_contentsSizeChanged &amp;&amp; !m_overflowExceedsContentsSize)
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceWebKitblackberryChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/blackberry/ChangeLog (149626 => 149627)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/blackberry/ChangeLog        2013-05-06 19:31:37 UTC (rev 149626)
+++ trunk/Source/WebKit/blackberry/ChangeLog        2013-05-06 19:36:29 UTC (rev 149627)
</span><span class="lines">@@ -1,5 +1,24 @@
</span><span class="cx"> 2013-05-06  Nima Ghanavatian  &lt;nghanavatian@blackberry.com&gt;
</span><span class="cx"> 
</span><ins>+        [BlackBerry] Do not spellcheck when composition is active.
+        https://bugs.webkit.org/show_bug.cgi?id=115562
+
+        Reviewed by Rob Buis.
+
+        Internally reviewed by Mike Fenton.
+
+        PR331344
+        Typing can trigger rechecking since layout changes. Ensure
+        extra work is only done when we need it, and that it won't
+        be triggered when composition is active. If the user hasn't
+        finished a word yet, it is likely future key events will be
+        arriving, so checking the string at this point is extraneous.
+
+        * WebKitSupport/InputHandler.cpp:
+        (BlackBerry::WebKit::InputHandler::requestCheckingOfString):
+
+2013-05-06  Nima Ghanavatian  &lt;nghanavatian@blackberry.com&gt;
+
</ins><span class="cx">         [BlackBerry] Reduce the spellcheck checking range
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=115479
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKitblackberryWebKitSupportInputHandlercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp (149626 => 149627)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp        2013-05-06 19:31:37 UTC (rev 149626)
+++ trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp        2013-05-06 19:36:29 UTC (rev 149627)
</span><span class="lines">@@ -623,6 +623,7 @@
</span><span class="cx"> 
</span><span class="cx">     // Check if the field should be spellchecked.
</span><span class="cx">     if (!isActiveTextEdit() || !shouldSpellCheckElement(m_currentFocusElement.get()) || requestLength &lt; 2) {
</span><ins>+        SpellingLog(Platform::LogLevelWarn, &quot;InputHandler::requestCheckingOfString request cancelled&quot;);
</ins><span class="cx">         spellCheckRequest-&gt;didCancel();
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="lines">@@ -1150,14 +1151,25 @@
</span><span class="cx">     return m_spellCheckStatusConfirmed ? m_globalSpellCheckStatus : true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void InputHandler::stopPendingSpellCheckRequests()
</del><ins>+void InputHandler::stopPendingSpellCheckRequests(bool isRestartRequired)
</ins><span class="cx"> {
</span><span class="cx">     m_spellingHandler-&gt;setSpellCheckActive(false);
</span><del>-    // Prevent response from propagating through
</del><ins>+    // Prevent response from propagating through.
</ins><span class="cx">     m_processingTransactionId = 0;
</span><ins>+
</ins><span class="cx">     // Reject requests until lastRequestSequence. This helps us clear the queue of stale requests.
</span><del>-    if (SpellChecker* spellChecker = getSpellChecker())
-        m_minimumSpellCheckingRequestSequence = spellChecker-&gt;lastRequestSequence();
</del><ins>+    if (SpellChecker* spellChecker = getSpellChecker()) {
+        if (spellChecker-&gt;lastRequestSequence() != spellChecker-&gt;lastProcessedSequence()) {
+            SpellingLog(LogLevelInfo, &quot;InputHandler::stopPendingSpellCheckRequests will block requests up to lastRequest=%d [lastProcessed=%d]&quot;
+                , spellChecker-&gt;lastRequestSequence(), spellChecker-&gt;lastProcessedSequence());
+            // Prevent requests in queue from executing.
+            m_minimumSpellCheckingRequestSequence = spellChecker-&gt;lastRequestSequence();
+            if (isRestartRequired &amp;&amp; !compositionActive()) {
+                // Create new spellcheck requests to replace those that were invalidated.
+                spellCheckTextBlock();
+            }
+        }
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void InputHandler::redrawSpellCheckDialogIfRequired(const bool shouldMoveDialog)
</span></span></pre></div>
<a id="trunkSourceWebKitblackberryWebKitSupportInputHandlerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.h (149626 => 149627)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.h        2013-05-06 19:31:37 UTC (rev 149626)
+++ trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.h        2013-05-06 19:36:29 UTC (rev 149627)
</span><span class="lines">@@ -148,7 +148,7 @@
</span><span class="cx"> 
</span><span class="cx">     void requestCheckingOfString(PassRefPtr&lt;WebCore::SpellCheckRequest&gt;);
</span><span class="cx">     void spellCheckingRequestProcessed(int32_t transactionId, spannable_string_t*);
</span><del>-    void stopPendingSpellCheckRequests();
</del><ins>+    void stopPendingSpellCheckRequests(bool isRestartRequired = false);
</ins><span class="cx">     void spellCheckTextBlock(WebCore::Element* = 0);
</span><span class="cx"> 
</span><span class="cx">     bool shouldRequestSpellCheckingOptionsForPoint(const Platform::IntPoint&amp; documentContentPosition, const WebCore::Element*, imf_sp_text_t&amp;);
</span></span></pre>
</div>
</div>

</body>
</html>