[Chromium] Should not return WebTextInputTypeNone for date input element.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 28 Feb 2013 05:53:00 +0000 (05:53 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 28 Feb 2013 05:53:00 +0000 (05:53 +0000)
https://bugs.webkit.org/show_bug.cgi?id=110740

Patch by Seigo Nonaka <nona@chromium.org> on 2013-02-27
Reviewed by Kent Tamura.

In the case of Windows 8, text input state including on-screen keyboard is controlled by the
value of WebTextInputType returned from WebViewImpl::textInputType().
In past, it returned WebTextInputTypeDate for date text input but now it returns
WebTextInputTypeNone.
WebTextInputTypeNone is used for non editable node, so on-screen keyboard will be hidden if
the date text input is focused.  So there is no way to input on Windows 8 tablet without
physical keyboard except tapping small up/down arrow.

* public/WebTextInputType.h: Introduces WebTextInputTypeDateTimeField.
* src/WebViewImpl.cpp:
(WebKit::WebViewImpl::textInputInfo): Fills type filed regardless of editable or not. It is
safe because textInputType returns editable type only for known editable element.
(WebKit::WebViewImpl::textInputType): Returns WebTextInputTypeDateTimeField for the date
time field element.

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

Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/public/WebTextInputType.h
Source/WebKit/chromium/src/WebViewImpl.cpp

index d068750..0fc9f56 100644 (file)
@@ -1,3 +1,25 @@
+2013-02-27  Seigo Nonaka  <nona@chromium.org>
+
+        [Chromium] Should not return WebTextInputTypeNone for date input element.
+        https://bugs.webkit.org/show_bug.cgi?id=110740
+
+        Reviewed by Kent Tamura.
+
+        In the case of Windows 8, text input state including on-screen keyboard is controlled by the
+        value of WebTextInputType returned from WebViewImpl::textInputType().
+        In past, it returned WebTextInputTypeDate for date text input but now it returns
+        WebTextInputTypeNone.
+        WebTextInputTypeNone is used for non editable node, so on-screen keyboard will be hidden if
+        the date text input is focused.  So there is no way to input on Windows 8 tablet without
+        physical keyboard except tapping small up/down arrow.
+
+        * public/WebTextInputType.h: Introduces WebTextInputTypeDateTimeField.
+        * src/WebViewImpl.cpp:
+        (WebKit::WebViewImpl::textInputInfo): Fills type filed regardless of editable or not. It is
+        safe because textInputType returns editable type only for known editable element.
+        (WebKit::WebViewImpl::textInputType): Returns WebTextInputTypeDateTimeField for the date
+        time field element.
+
 2013-02-27  James Simonsen  <simonjam@chromium.org>
 
         [chromium] Lower priority of preloaded images
index e59381d..fea0c45 100644 (file)
@@ -61,6 +61,11 @@ enum WebTextInputType {
 
     // Input caret is in a contenteditable node (not an INPUT field).
     WebTextInputTypeContentEditable,
+
+    // The focused node is date time field. The date time field does not have
+    // input caret but it is necessary to distinguish from WebTextInputTypeNone
+    // for on-screen keyboard.
+    WebTextInputTypeDateTimeField,
 };
 
 } // namespace WebKit
index abaa8f7..eaac4f1 100644 (file)
@@ -2282,6 +2282,10 @@ WebTextInputInfo WebViewImpl::textInputInfo()
     if (!focused)
         return info;
 
+    info.type = textInputType();
+    if (info.type == WebTextInputTypeNone)
+        return info;
+
     Editor* editor = focused->editor();
     if (!editor || !editor->canEdit())
         return info;
@@ -2294,10 +2298,6 @@ WebTextInputInfo WebViewImpl::textInputInfo()
     if (!node)
         return info;
 
-    info.type = textInputType();
-    if (info.type == WebTextInputTypeNone)
-        return info;
-
     info.value = plainText(rangeOfContents(node).get());
 
     if (info.value.isEmpty())
@@ -2367,6 +2367,14 @@ WebTextInputType WebViewImpl::textInputType()
         return WebTextInputTypeTextArea;
     }
 
+#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
+    if (node->isHTMLElement()) {
+        HTMLElement* element = toHTMLElement(node);
+        if (element->isDateTimeFieldElement())
+            return WebTextInputTypeDateTimeField;
+    }
+#endif
+
     if (node->shouldUseInputMethod())
         return WebTextInputTypeContentEditable;