[BlackBerry] SpellingHandler parses and creates spellcheck requests regardless of...
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 28 Jan 2013 16:59:07 +0000 (16:59 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 28 Jan 2013 16:59:07 +0000 (16:59 +0000)
https://bugs.webkit.org/show_bug.cgi?id=108085
PR 286165

Patch by Otto Derek Cheung <otcheung@rim.com> on 2013-01-28
Reviewed by Rob Buis.
Internally reviewed by Nima Ghanavatian.

Adding a check for the system spell check status in InputHandler::shouldSpellCheckElement so
we won't bother sending a spellcheck request if system spell check is turned off.

However, on a fresh browser start up and on the first setElementFocus, the spellcheck value isn't defined yet.
The first spell check request is therefore necessary to connect to imf to determine whether spell check is turned on.
If spell check is turned off, we will turn spellinghandler off.

Tested the patch using a test site that contains editable text in text-areas and content-editable divs. Also tested on
an extreme test case where we try to edit a content-editable div with 30000 characters. Confirmed spell-check requests are
being canceled if system spell check is off.

In theory, this patch should also fix PR 284229 . However, because of issues with getting the system spell check values from IMF,
additional work needs to be done for that PR.

* Api/WebPage.cpp:
(BlackBerry::WebKit::WebPage::setSpellCheckingEnabled):
* WebKitSupport/InputHandler.cpp:
(BlackBerry::WebKit::InputHandler::InputHandler):
(BlackBerry::WebKit::InputHandler::shouldSpellCheckElement):
(WebKit):
(BlackBerry::WebKit::InputHandler::stopPendingSpellCheckRequests):
* WebKitSupport/InputHandler.h:
(InputHandler):
(BlackBerry::WebKit::InputHandler::setSystemSpellCheckStatus):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@140973 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/blackberry/Api/WebPage.cpp
Source/WebKit/blackberry/ChangeLog
Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp
Source/WebKit/blackberry/WebKitSupport/InputHandler.h

index 9f61b73e0081c54e37106996ee93a11a84a33643..73007c64ad9b5b3e58b8307d173385f199191879 100644 (file)
@@ -4392,6 +4392,11 @@ int32_t WebPage::commitText(spannable_string_t* spannableString, int32_t relativ
 void WebPage::setSpellCheckingEnabled(bool enabled)
 {
     static_cast<EditorClientBlackBerry*>(d->m_page->editorClient())->enableSpellChecking(enabled);
+
+    d->m_inputHandler->setSystemSpellCheckStatus(enabled);
+
+    if (!enabled)
+        d->m_inputHandler->stopPendingSpellCheckRequests();
 }
 
 void WebPage::spellCheckingRequestCancelled(int32_t transactionId)
index 348d81c7b8a30ad5820c8471ad150fd89fc0c8c5..ead6a8329aeda20e037a367f55be7c03c38d3747 100644 (file)
@@ -1,3 +1,37 @@
+2013-01-28  Otto Derek Cheung  <otcheung@rim.com>
+
+        [BlackBerry] SpellingHandler parses and creates spellcheck requests regardless of the system spell check status
+        https://bugs.webkit.org/show_bug.cgi?id=108085
+        PR 286165
+
+        Reviewed by Rob Buis.
+        Internally reviewed by Nima Ghanavatian.
+
+        Adding a check for the system spell check status in InputHandler::shouldSpellCheckElement so
+        we won't bother sending a spellcheck request if system spell check is turned off.
+
+        However, on a fresh browser start up and on the first setElementFocus, the spellcheck value isn't defined yet.
+        The first spell check request is therefore necessary to connect to imf to determine whether spell check is turned on.
+        If spell check is turned off, we will turn spellinghandler off.
+
+        Tested the patch using a test site that contains editable text in text-areas and content-editable divs. Also tested on
+        an extreme test case where we try to edit a content-editable div with 30000 characters. Confirmed spell-check requests are
+        being canceled if system spell check is off.
+
+        In theory, this patch should also fix PR 284229 . However, because of issues with getting the system spell check values from IMF,
+        additional work needs to be done for that PR. 
+
+        * Api/WebPage.cpp:
+        (BlackBerry::WebKit::WebPage::setSpellCheckingEnabled):
+        * WebKitSupport/InputHandler.cpp:
+        (BlackBerry::WebKit::InputHandler::InputHandler):
+        (BlackBerry::WebKit::InputHandler::shouldSpellCheckElement):
+        (WebKit):
+        (BlackBerry::WebKit::InputHandler::stopPendingSpellCheckRequests):
+        * WebKitSupport/InputHandler.h:
+        (InputHandler):
+        (BlackBerry::WebKit::InputHandler::setSystemSpellCheckStatus):
+
 2013-01-25  Andrew Lo  <anlo@rim.com>
 
         [BlackBerry] Pop-up WebViews should not take ownership of the backing store.
index c76d35ead81f5b83daded37f482f123788355a90..67ed670587130bff66e5504949592b866f6b5d60 100644 (file)
@@ -143,6 +143,8 @@ InputHandler::InputHandler(WebPagePrivate* page)
     , m_expectedKeyUpChar(0)
     , m_didSpellCheckWord(false)
     , m_spellingHandler(new SpellingHandler(this))
+    , m_spellCheckStatusConfirmed(false)
+    , m_globalSpellCheckStatus(false)
 {
 }
 
@@ -981,7 +983,13 @@ bool InputHandler::shouldSpellCheckElement(const Element* element) const
     if (spellCheckAttr == DOMSupport::Default && (m_currentFocusElementTextEditMask & NO_AUTO_TEXT))
         return false;
 
-    return true;
+    // Check if the system spell check setting is off
+    return m_spellCheckStatusConfirmed ? m_globalSpellCheckStatus : true;
+}
+
+void InputHandler::stopPendingSpellCheckRequests()
+{
+    m_spellingHandler->setSpellCheckActive(false);
 }
 
 void InputHandler::redrawSpellCheckDialogIfRequired(const bool shouldMoveDialog)
index 959d160f9fe2af2bed6d38c825c6146c1c1db5c9..44a90b4dd519fe31e55f3fa372c97dc7528d345d 100644 (file)
@@ -144,6 +144,7 @@ public:
     void requestCheckingOfString(PassRefPtr<WebCore::TextCheckingRequest>);
     void spellCheckingRequestProcessed(int32_t transactionId, spannable_string_t*);
     void spellCheckingRequestCancelled(int32_t transactionId);
+    void stopPendingSpellCheckRequests();
 
     bool shouldRequestSpellCheckingOptionsForPoint(const Platform::IntPoint& documentContentPosition, const WebCore::Element*, imf_sp_text_t&);
     void requestSpellingCheckingOptions(imf_sp_text_t&, WebCore::IntSize& screenOffset, const bool shouldMoveDialog = false);
@@ -151,6 +152,9 @@ public:
     void redrawSpellCheckDialogIfRequired(const bool shouldMoveDialog = true);
 
     void callRequestCheckingFor(PassRefPtr<WebCore::SpellCheckRequest>);
+    void setSystemSpellCheckStatus(bool enabled) { m_spellCheckStatusConfirmed = true; m_globalSpellCheckStatus = enabled; }
+
+    void callRequestCheckingFor(PassRefPtr<WebCore::SpellCheckRequest>);
 
 private:
     enum PendingKeyboardStateChange { NoChange, Visible, NotVisible };
@@ -240,6 +244,8 @@ private:
     WebCore::IntSize m_screenOffset;
     bool m_didSpellCheckWord;
     SpellingHandler* m_spellingHandler;
+    bool m_spellCheckStatusConfirmed;
+    bool m_globalSpellCheckStatus;
 
     DISABLE_COPY(InputHandler);
 };