[BlackBerry] Text selection with touch hold does not start on text field in some...
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 16 Jul 2012 14:54:03 +0000 (14:54 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 16 Jul 2012 14:54:03 +0000 (14:54 +0000)
https://bugs.webkit.org/show_bug.cgi?id=91267

Patch by Yongxin Dai <yodai@rim.com> on 2012-07-16
Reviewed by Antonio Gomes.

Input fields host node is by spec non-editable unless the field itself has content editable enabled.
We enable selection if the shadow tree for the input field is selectable.
PR # 173450

Reviewed Internally by Mike Fenton.

* Api/WebPage.cpp:
(BlackBerry::WebKit::WebPagePrivate::webContext):
* Api/WebPage.cpp:
(BlackBerry::WebKit::WebPagePrivate::webContext):

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

Source/WebKit/blackberry/Api/WebPage.cpp
Source/WebKit/blackberry/ChangeLog

index 97b56a7..fb3212b 100644 (file)
@@ -2383,9 +2383,6 @@ Platform::WebContext WebPagePrivate::webContext(TargetDetectionStrategy strategy
         }
     }
 
-    if (!nodeAllowSelectionOverride && !node->canStartSelection())
-        context.resetFlag(Platform::WebContext::IsSelectable);
-
     if (node->isHTMLElement()) {
         HTMLImageElement* imageElement = 0;
         HTMLMediaElement* mediaElement = 0;
@@ -2429,9 +2426,18 @@ Platform::WebContext WebPagePrivate::webContext(TargetDetectionStrategy strategy
             context.setText(curText->wholeText().utf8().data());
     }
 
+    bool canStartSelection = node->canStartSelection();
+
     if (node->isElementNode()) {
         Element* element = static_cast<Element*>(node->shadowAncestorNode());
         if (DOMSupport::isTextBasedContentEditableElement(element)) {
+            if (!canStartSelection) {
+                // Input fields host node is by spec non-editable unless the field itself has content editable enabled.
+                // Enable selection if the shadow tree for the input field is selectable.
+                Node* nodeUnderFinger = m_touchEventHandler->lastFatFingersResult().isValid() ? m_touchEventHandler->lastFatFingersResult().node(FatFingersResult::ShadowContentAllowed) : 0;
+                if (nodeUnderFinger)
+                    canStartSelection = nodeUnderFinger->canStartSelection();
+            }
             context.setFlag(Platform::WebContext::IsInput);
             if (element->hasTagName(HTMLNames::inputTag))
                 context.setFlag(Platform::WebContext::IsSingleLine);
@@ -2444,6 +2450,9 @@ Platform::WebContext WebPagePrivate::webContext(TargetDetectionStrategy strategy
         }
     }
 
+    if (!nodeAllowSelectionOverride && !canStartSelection)
+        context.resetFlag(Platform::WebContext::IsSelectable);
+
     if (node->isFocusable())
         context.setFlag(Platform::WebContext::IsFocusable);
 
index 7d76bcb..03b9fee 100644 (file)
@@ -1,3 +1,21 @@
+2012-07-16  Yongxin Dai  <yodai@rim.com>
+
+        [BlackBerry] Text selection with touch hold does not start on text field in some cases
+        https://bugs.webkit.org/show_bug.cgi?id=91267
+
+        Reviewed by Antonio Gomes.
+
+        Input fields host node is by spec non-editable unless the field itself has content editable enabled.
+        We enable selection if the shadow tree for the input field is selectable.
+        PR # 173450
+
+        Reviewed Internally by Mike Fenton.
+
+        * Api/WebPage.cpp:
+        (BlackBerry::WebKit::WebPagePrivate::webContext):
+        * Api/WebPage.cpp:
+        (BlackBerry::WebKit::WebPagePrivate::webContext):
+
 2012-07-15  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>
 
         [BlackBerry] Move icon database to application data directory.