Bug 109544 - INPUT_MULTIPLE_FIELDS_UI: Mouse click not on sub-fields in multiple fields input should not move focus
Summary: INPUT_MULTIPLE_FIELDS_UI: Mouse click not on sub-fields in multiple fields in...
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: Forms (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Kent Tamura
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-02-11 21:53 PST by Kent Tamura
Modified: 2013-02-12 01:02 PST (History)
6 users (show)

See Also:


Attachments
Patch (18.27 KB, patch)
2013-02-11 22:13 PST, Kent Tamura
no flags Details | Formatted Diff | Diff
Patch 2 (18.35 KB, patch)
2013-02-11 23:20 PST, Kent Tamura
no flags Details | Formatted Diff | Diff
INPUT_MULTIPLE_FIELDS_UI: Mouse click not on sub-fields in multiple fields input should not move focus (18.37 KB, text/plain)
2013-02-12 01:00 PST, Nils Barth
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Kent Tamura 2013-02-11 21:53:48 PST
INPUT_MULTIPLE_FIELDS_UI: Mouse click not on sub-fields in multiple fields input  should not move focus

Steps to reproduce:
1. Open data:text/html,<input type=time autofocus>
2. Click on the minutes field
3. Click on ':' between fields

Expected:
  Nothing happens. The minutes field keeps focus.
Actual:
  Chrome 24: Any sub-fields doesn't have focus.
  Chrome 26: The hour field gets focus.
Comment 1 Kent Tamura 2013-02-11 22:13:44 PST
Created attachment 187773 [details]
Patch
Comment 2 Build Bot 2013-02-11 23:11:54 PST
Comment on attachment 187773 [details]
Patch

Attachment 187773 [details] did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16496635
Comment 3 Kent Tamura 2013-02-11 23:20:58 PST
Created attachment 187781 [details]
Patch 2

Fix mac build
Comment 4 Kentaro Hara 2013-02-12 00:03:24 PST
Comment on attachment 187781 [details]
Patch 2

Looks OK
Comment 5 WebKit Review Bot 2013-02-12 00:36:36 PST
Comment on attachment 187781 [details]
Patch 2

Clearing flags on attachment: 187781

Committed r142592: <http://trac.webkit.org/changeset/142592>
Comment 6 WebKit Review Bot 2013-02-12 00:36:40 PST
All reviewed patches have been landed.  Closing bug.
Comment 7 Nils Barth 2013-02-12 01:00:18 PST
Created attachment 187803 [details]
INPUT_MULTIPLE_FIELDS_UI: Mouse click not on sub-fields in multiple fields input  should not move focus

https://bugs.webkit.org/show_bug.cgi?id=109544

Reviewed by Kentaro Hara.

Source/WebCore:

This is similar to Bug 108914, "Should not move focus if the element
already has focus." We fixed a focus() case in Bug 108914. However we
still have the problem in a case of focusing by mouse click.

The fix for Bug 108914 intercepted focus() function to change the
behavior. However focus-by-click doesn't call focus(), but calls
FocusController::setFocusedNode. To fix this problem, we introduce
oldFocusedNode argument to handleFocusEvent, and
BaseMultipleFieldsDateAndTimeInputType::handleFocusEvent restores the
focus to oldFocusedNode if oldFocusedNode is one of sub-fields.
handleFocusEvent is called whenever the focused node is changed.

We don't need InputType::willCancelFocus any more because the new code
in handleFocusEvent covers it.

Tests: Update fast/forms/time-multiple-fields/time-multiple-fields-focus.html.

* html/HTMLTextFormControlElement.h:
(WebCore::HTMLTextFormControlElement::handleFocusEvent):
Add oldFocusedNode argument.
* html/HTMLTextFormControlElement.cpp:
(WebCore::HTMLTextFormControlElement::dispatchFocusEvent):
Pass oldFocusedNode to handleFocusEvent.

* html/HTMLInputElement.h:
(HTMLInputElement):
- Add oldFocusedNode argument to handleFocusEvent.
- Remove focus() override.
* html/HTMLInputElement.cpp: Remove focus() override.
(WebCore::HTMLInputElement::handleFocusEvent):
Pass oldFocusedNode to InputType::handleFocusEvent.
* html/InputType.cpp: Remove willCancelFocus.
(WebCore::InputType::handleFocusEvent):
Add oldFocusedNode argument.
* html/InputType.h:
(InputType): Ditto.
* html/PasswordInputType.cpp:
(WebCore::PasswordInputType::handleFocusEvent): Ditto.
* html/PasswordInputType.h:
(PasswordInputType): Ditto.

* html/BaseMultipleFieldsDateAndTimeInputType.h:
(BaseMultipleFieldsDateAndTimeInputType):
Remove willCancelFocus, and add oldFocusedNode argument to handleFocusEvent.
* html/BaseMultipleFieldsDateAndTimeInputType.cpp:
(WebCore::BaseMultipleFieldsDateAndTimeInputType::handleFocusEvent):
Pass oldFocusedNode to DateTimeEditElement::focusByOwner if the
direction is FocusDirectionNone.

* html/shadow/DateTimeEditElement.h:
(DateTimeEditElement): Add oldFocusedNode argument to focusByOwner.
* html/shadow/DateTimeEditElement.cpp:
(WebCore::DateTimeEditElement::focusByOwner):
If oldFocusedNode is one of sub-fields, focus on it again.

LayoutTests:

* fast/forms/time-multiple-fields/time-multiple-fields-focus-expected.txt:
* fast/forms/time-multiple-fields/time-multiple-fields-focus.html:
Add test to click a delimiter.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@142592 268f45cc-cd09-0410-ab3c-d52691b4dbfc
---
 16 files changed, 118 insertions(+), 45 deletions(-)
Comment 8 Nils Barth 2013-02-12 01:02:19 PST
(In reply to comment #7)
> Created an attachment (id=187803) [details]

Sorry sorry -- webkit-patch accidentally uploaded to wrong bug number.
Please ignore.