Title: [149043] trunk/Source/WebKit/blackberry
Revision
149043
Author
[email protected]
Date
2013-04-24 08:59:54 -0700 (Wed, 24 Apr 2013)

Log Message

[BlackBerry] Do not clear focus on a node when tapping on form controls
https://bugs.webkit.org/show_bug.cgi?id=115055

Patch by Nima Ghanavatian <[email protected]> on 2013-04-24
Reviewed by Rob Buis.

Internally reviewed by Genevieve Mak.

PR316069
To allow for rich text editors to apply styles on an input field
or highlighted text, we must maintain focus on the current element
when tapping on form elements. Moving the code that clears this
context to trigger off TouchHold instead of TouchPress.

* WebKitSupport/TouchEventHandler.cpp:
(BlackBerry::WebKit::TouchEventHandler::doFatFingers):

Modified Paths

Diff

Modified: trunk/Source/WebKit/blackberry/Api/WebPage.cpp (149042 => 149043)


--- trunk/Source/WebKit/blackberry/Api/WebPage.cpp	2013-04-24 15:49:12 UTC (rev 149042)
+++ trunk/Source/WebKit/blackberry/Api/WebPage.cpp	2013-04-24 15:59:54 UTC (rev 149043)
@@ -4027,6 +4027,9 @@
             d->m_touchEventHandler->drawTapHighlight();
     }
 
+    if (event.isTouchHold())
+        d->m_touchEventHandler->handleTouchHold();
+
     bool handled = false;
 
     if (event.m_type != Platform::TouchEvent::TouchInjected)

Modified: trunk/Source/WebKit/blackberry/ChangeLog (149042 => 149043)


--- trunk/Source/WebKit/blackberry/ChangeLog	2013-04-24 15:49:12 UTC (rev 149042)
+++ trunk/Source/WebKit/blackberry/ChangeLog	2013-04-24 15:59:54 UTC (rev 149043)
@@ -1 +1,19 @@
+2013-04-24  Nima Ghanavatian  <[email protected]>
+
+        [BlackBerry] Do not clear focus on a node when tapping on form controls
+        https://bugs.webkit.org/show_bug.cgi?id=115055
+
+        Reviewed by Rob Buis.
+
+        Internally reviewed by Genevieve Mak.
+
+        PR316069
+        To allow for rich text editors to apply styles on an input field
+        or highlighted text, we must maintain focus on the current element
+        when tapping on form elements. Moving the code that clears this
+        context to trigger off TouchHold instead of TouchPress.
+
+        * WebKitSupport/TouchEventHandler.cpp:
+        (BlackBerry::WebKit::TouchEventHandler::doFatFingers):
+
 == Rolled over to ChangeLog-2013-04-24 ==

Modified: trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp (149042 => 149043)


--- trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp	2013-04-24 15:49:12 UTC (rev 149042)
+++ trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.cpp	2013-04-24 15:59:54 UTC (rev 149043)
@@ -155,6 +155,7 @@
     , m_spellCheckStatusConfirmed(false)
     , m_globalSpellCheckStatus(false)
     , m_minimumSpellCheckingRequestSequence(-1)
+    , m_elementTouchedIsCrossFrame(false)
 {
 }
 
@@ -471,8 +472,10 @@
         // top level parent of this object's content editable state without actually modifying
         // this particular object.
         // Example site: html5demos.com/contentEditable - blur event triggers focus change.
-        if (frame == m_webPage->focusedOrMainFrame() && frame->selection()->start().anchorNode()
-            && frame->selection()->start().anchorNode()->isContentEditable())
+        if (frame == m_webPage->focusedOrMainFrame()
+            && frame->selection()->start().anchorNode()
+            && frame->selection()->start().anchorNode()->isContentEditable()
+            && !m_elementTouchedIsCrossFrame)
                 return;
     }
 
@@ -2640,6 +2643,8 @@
     // Attempt to show all suggestions when the input field is empty and a tap is registered when the element is focused.
     if (isActiveTextEdit() && nonShadowElementUnderFatFinger == m_currentFocusElement)
         showTextInputTypeSuggestionBox(true /* allowEmptyPrefix */);
+
+    m_elementTouchedIsCrossFrame = nonShadowElementUnderFatFinger->document()->frame() !=  m_webPage->focusedOrMainFrame();
 }
 
 }

Modified: trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.h (149042 => 149043)


--- trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.h	2013-04-24 15:49:12 UTC (rev 149042)
+++ trunk/Source/WebKit/blackberry/WebKitSupport/InputHandler.h	2013-04-24 15:59:54 UTC (rev 149043)
@@ -267,6 +267,7 @@
     int m_minimumSpellCheckingRequestSequence;
 
     OwnPtr<WebCore::SuggestionBoxHandler> m_suggestionDropdownBoxHandler;
+    bool m_elementTouchedIsCrossFrame;
 
     DISABLE_COPY(InputHandler);
 };

Modified: trunk/Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp (149042 => 149043)


--- trunk/Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp	2013-04-24 15:49:12 UTC (rev 149042)
+++ trunk/Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp	2013-04-24 15:59:54 UTC (rev 149043)
@@ -75,13 +75,6 @@
     m_webPage->postponeDocumentStyleRecalc();
     m_lastFatFingersResult = FatFingers(m_webPage, point.documentContentPosition(), FatFingers::ClickableElement).findBestPoint();
     m_webPage->resumeDocumentStyleRecalc();
-
-    Node* nodeUnderFatFinger = m_lastFatFingersResult.node();
-    if (nodeUnderFatFinger && nodeUnderFatFinger->document()->frame() != m_webPage->focusedOrMainFrame()) {
-        m_webPage->clearFocusNode();
-        m_webPage->m_selectionHandler->cancelSelection();
-        m_webPage->m_page->focusController()->setFocusedFrame(nodeUnderFatFinger->document()->frame());
-    }
 }
 
 void TouchEventHandler::sendClickAtFatFingersPoint(unsigned modifiers)
@@ -99,6 +92,18 @@
     m_webPage->handleMouseEvent(mouseRelease);
 }
 
+void TouchEventHandler::handleTouchHold()
+{
+    // Clear and reset focus if the user touch-holds on a different frame.
+    // Special case for highlighting text on a frame not currently under focus [PR 285211].
+    Node* nodeUnderFatFinger = m_lastFatFingersResult.node();
+    if (nodeUnderFatFinger && nodeUnderFatFinger->document()->frame() != m_webPage->focusedOrMainFrame()) {
+        m_webPage->clearFocusNode();
+        m_webPage->m_selectionHandler->cancelSelection();
+        m_webPage->m_page->focusController()->setFocusedFrame(nodeUnderFatFinger->document()->frame());
+    }
+}
+
 void TouchEventHandler::handleTouchPoint(const Platform::TouchPoint& point, unsigned modifiers)
 {
     // Enable input mode on any touch event.

Modified: trunk/Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.h (149042 => 149043)


--- trunk/Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.h	2013-04-24 15:49:12 UTC (rev 149042)
+++ trunk/Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.h	2013-04-24 15:59:54 UTC (rev 149043)
@@ -36,6 +36,7 @@
     ~TouchEventHandler();
 
     void doFatFingers(const Platform::TouchPoint&);
+    void handleTouchHold();
     void handleTouchPoint(const Platform::TouchPoint&, unsigned modifiers);
     void sendClickAtFatFingersPoint(unsigned modifiers = 0);
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to