Changeset 141738 in webkit
- Timestamp:
- Feb 3, 2013 10:11:17 PM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 24 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r141735 r141738 1 2013-02-03 Kent Tamura <tkent@chromium.org> 2 3 Add FocusDirection argument to HTMLTextFormControlElement::handleFocusEvent 4 https://bugs.webkit.org/show_bug.cgi?id=108775 5 6 Reviewed by Hajime Morita. 7 8 We'd like to add a FocusDirection argument to 9 HTMLTextFormControlElement::handleFocusEvent in order to fix Bug 10 108447. This is a preparation for it. 11 12 We need to add FocusDirection arguments to some focus-related functions 13 to pass it correctly when TAB or Shift+TAB is pressed. 14 15 No new tests. This doesn't make any behavior changes. 16 17 * html/HTMLTextFormControlElement.cpp: 18 (WebCore::HTMLTextFormControlElement::dispatchFocusEvent): 19 To pass the FocusDirection argument to handleFocusEvent, we need to add 20 it to dispatchFocusEvent too. 21 * html/HTMLTextFormControlElement.h: 22 (HTMLTextFormControlElement): 23 Add FocusDirection arugment to dispatchFocusEvent. 24 (WebCore::HTMLTextFormControlElement::handleFocusEvent): 25 Add FocusDirection argument. 26 27 * dom/Node.cpp: 28 (WebCore::Node::dispatchFocusEvent): Add FocusDirection argument. 29 * dom/Node.h: 30 (Node): Ditto. 31 32 * dom/Document.cpp: 33 (WebCore::Document::setFocusedNode): Add FocusDirection argument in 34 order to pass it to Node::dispatchFocusEvent. 35 * dom/Document.h: 36 (Document): Ditto. 37 38 * page/FocusController.cpp: 39 (WebCore::dispatchEventsOnWindowAndFocusedNode): 40 Adjust Node::dispatchFocusEvent argument. 41 (WebCore::FocusController::advanceFocusInDocumentOrder): 42 Pass FocusDirectio to Element::focus. 43 (WebCore::FocusController::setFocusedNode): 44 Add FocusDirection argument in order to pass it to Document::setFocusedNode. 45 (WebCore::FocusController::advanceFocusDirectionallyInContainer): 46 Pass FocusDirectio to Element::focus. 47 * page/FocusController.h: 48 (FocusController): Add FocusDirection argument to setFocusedNode. 49 50 * dom/Element.cpp: 51 (WebCore::Element::focus): 52 Add FocusDirection argument to pass it to FocusController::setFocusedNode. 53 * dom/Element.h: 54 (Element): Ditto. 55 56 * WebCore.exp.in: 57 Update FocusController::setFocusedNode and Document::setFocusedNode. 58 59 * html/HTMLLabelElement.cpp: 60 (WebCore::HTMLLabelElement::focus): Adjust FocusDirection argument. 61 * html/HTMLLabelElement.h: 62 (HTMLLabelElement): Ditto. 63 * html/HTMLLegendElement.cpp: 64 (WebCore::HTMLLegendElement::focus): Ditto. 65 * html/HTMLLegendElement.h: 66 (HTMLLegendElement): Ditto. 67 * html/HTMLSelectElement.cpp: 68 (WebCore::HTMLSelectElement::dispatchFocusEvent): Ditto. 69 * html/HTMLSelectElement.h: 70 (HTMLSelectElement): Ditto. 71 72 * html/HTMLInputElement.cpp: 73 (WebCore::HTMLInputElement::defaultFocus): 74 Add FocusDirection argument in order to pass it from 75 HTMLInputElement::focus() to HTMLTextFormControlElement::focus(). 76 (WebCore::HTMLInputElement::focus): 77 Pass the FocusDirection argument to InputType::focus. See above. 78 (WebCore::HTMLInputElement::handleFocusEvent): 79 Adjust FocusDirection argument. 80 * html/HTMLInputElement.h: 81 (HTMLInputElement): 82 * html/InputType.cpp: 83 (WebCore::InputType::focus): Add FocusDirection argument. 84 * html/InputType.h: 85 (InputType): Ditto. 86 87 * html/BaseMultipleFieldsDateAndTimeInputType.cpp: 88 (WebCore::BaseMultipleFieldsDateAndTimeInputType::focus): 89 Add FocusDirection argument to follow InputType. 90 * html/BaseMultipleFieldsDateAndTimeInputType.h: 91 (BaseMultipleFieldsDateAndTimeInputType): Ditto. 92 1 93 2013-02-03 Kassy Coan <kassycoan@chromium.org> 2 94 -
trunk/Source/WebCore/WebCore.exp.in
r141656 r141738 385 385 __ZN7WebCore15DatabaseManager9setClientEPNS_21DatabaseManagerClientE 386 386 __ZN7WebCore15FocusController10setFocusedEb 387 __ZN7WebCore15FocusController14setFocusedNodeEPNS_4NodeEN3WTF10PassRefPtrINS_5FrameEEE 387 __ZN7WebCore15FocusController14setFocusedNodeEPNS_4NodeEN3WTF10PassRefPtrINS_5FrameEEENS_14FocusDirectionE 388 388 __ZN7WebCore15FocusController15setFocusedFrameEN3WTF10PassRefPtrINS_5FrameEEE 389 389 __ZN7WebCore15FocusController15setInitialFocusENS_14FocusDirectionEPNS_13KeyboardEventE … … 931 931 __ZN7WebCore8Document13createElementERKNS_13QualifiedNameEb 932 932 __ZN7WebCore8Document14createTextNodeERKN3WTF6StringE 933 __ZN7WebCore8Document14setFocusedNodeEN3WTF10PassRefPtrINS_4NodeEEE 933 __ZN7WebCore8Document14setFocusedNodeEN3WTF10PassRefPtrINS_4NodeEEENS_14FocusDirectionE 934 934 __ZN7WebCore8Document16isPageBoxVisibleEi 935 935 __ZN7WebCore8Document17getFocusableNodesERN3WTF6VectorINS1_6RefPtrINS_4NodeEEELm0EEE -
trunk/Source/WebCore/dom/Document.cpp
r141570 r141738 3287 3287 #endif 3288 3288 3289 bool Document::setFocusedNode(PassRefPtr<Node> prpNewFocusedNode )3289 bool Document::setFocusedNode(PassRefPtr<Node> prpNewFocusedNode, FocusDirection direction) 3290 3290 { 3291 3291 RefPtr<Node> newFocusedNode = prpNewFocusedNode; … … 3365 3365 3366 3366 // Dispatch the focus event and let the node do any other focus related activities (important for text fields) 3367 m_focusedNode->dispatchFocusEvent(oldFocusedNode );3367 m_focusedNode->dispatchFocusEvent(oldFocusedNode, direction); 3368 3368 3369 3369 if (m_focusedNode != newFocusedNode) { -
trunk/Source/WebCore/dom/Document.h
r141524 r141738 35 35 #include "DocumentEventQueue.h" 36 36 #include "DocumentTiming.h" 37 #include "FocusDirection.h" 37 38 #include "IconURL.h" 38 39 #include "InspectorCounters.h" … … 687 688 void setSelectedStylesheetSet(const String&); 688 689 689 bool setFocusedNode(PassRefPtr<Node> );690 bool setFocusedNode(PassRefPtr<Node>, FocusDirection = FocusDirectionNone); 690 691 Node* focusedNode() const { return m_focusedNode.get(); } 691 692 UserActionElementSet& userActionElements() { return m_userActionElements; } -
trunk/Source/WebCore/dom/Element.cpp
r141570 r141738 1865 1865 } 1866 1866 1867 void Element::focus(bool restorePreviousSelection )1867 void Element::focus(bool restorePreviousSelection, FocusDirection direction) 1868 1868 { 1869 1869 if (!inDocument()) … … 1892 1892 // does not make sense to continue and update appearence. 1893 1893 protect = this; 1894 if (!page->focusController()->setFocusedNode(this, doc->frame() ))1894 if (!page->focusController()->setFocusedNode(this, doc->frame(), direction)) 1895 1895 return; 1896 1896 } -
trunk/Source/WebCore/dom/Element.h
r141524 r141738 346 346 virtual String target() const { return String(); } 347 347 348 virtual void focus(bool restorePreviousSelection = true );348 virtual void focus(bool restorePreviousSelection = true, FocusDirection = FocusDirectionNone); 349 349 virtual void updateFocusAppearance(bool restorePreviousSelection); 350 350 virtual void blur(); -
trunk/Source/WebCore/dom/Node.cpp
r141570 r141738 2413 2413 } 2414 2414 2415 void Node::dispatchFocusEvent(PassRefPtr<Node> oldFocusedNode )2415 void Node::dispatchFocusEvent(PassRefPtr<Node> oldFocusedNode, FocusDirection) 2416 2416 { 2417 2417 if (document()->page()) -
trunk/Source/WebCore/dom/Node.h
r141533 r141738 28 28 #include "EditingBoundary.h" 29 29 #include "EventTarget.h" 30 #include "FocusDirection.h" 30 31 #include "KURLHash.h" 31 32 #include "LayoutRect.h" … … 638 639 bool dispatchBeforeLoadEvent(const String& sourceURL); 639 640 640 virtual void dispatchFocusEvent(PassRefPtr<Node> oldFocusedNode );641 virtual void dispatchFocusEvent(PassRefPtr<Node> oldFocusedNode, FocusDirection); 641 642 virtual void dispatchBlurEvent(PassRefPtr<Node> newFocusedNode); 642 643 virtual void dispatchChangeEvent(); -
trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp
r141395 r141738 241 241 } 242 242 243 void BaseMultipleFieldsDateAndTimeInputType::focus(bool )243 void BaseMultipleFieldsDateAndTimeInputType::focus(bool, FocusDirection) 244 244 { 245 245 if (m_dateTimeEditElement) -
trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.h
r141395 r141738 82 82 virtual void destroyShadowSubtree() OVERRIDE FINAL; 83 83 virtual void disabledAttributeChanged() OVERRIDE FINAL; 84 virtual void focus(bool restorePreviousSelection ) OVERRIDE FINAL;84 virtual void focus(bool restorePreviousSelection, FocusDirection) OVERRIDE FINAL; 85 85 virtual void forwardEvent(Event*) OVERRIDE FINAL; 86 86 virtual void handleKeydownEvent(KeyboardEvent*) OVERRIDE FINAL; -
trunk/Source/WebCore/html/HTMLInputElement.cpp
r141570 r141738 371 371 } 372 372 373 void HTMLInputElement::defaultFocus(bool restorePreviousSelection )374 { 375 HTMLTextFormControlElement::focus(restorePreviousSelection );376 } 377 378 void HTMLInputElement::focus(bool restorePreviousSelection )379 { 380 m_inputType->focus(restorePreviousSelection );373 void HTMLInputElement::defaultFocus(bool restorePreviousSelection, FocusDirection direction) 374 { 375 HTMLTextFormControlElement::focus(restorePreviousSelection, direction); 376 } 377 378 void HTMLInputElement::focus(bool restorePreviousSelection, FocusDirection direction) 379 { 380 m_inputType->focus(restorePreviousSelection, direction); 381 381 } 382 382 … … 438 438 } 439 439 440 void HTMLInputElement::handleFocusEvent() 441 { 440 void HTMLInputElement::handleFocusEvent(FocusDirection) 441 { 442 // FIXME: Pass the FocusDirection argument to InputType:handleFocusEvent. 442 443 m_inputType->handleFocusEvent(); 443 444 } -
trunk/Source/WebCore/html/HTMLInputElement.h
r141395 r141738 281 281 virtual void blur() OVERRIDE; 282 282 void defaultBlur(); 283 void defaultFocus(bool restorePreviousSelection );284 virtual void focus(bool restorePreviousSelection = true ) OVERRIDE;283 void defaultFocus(bool restorePreviousSelection, FocusDirection); 284 virtual void focus(bool restorePreviousSelection = true, FocusDirection = FocusDirectionNone) OVERRIDE; 285 285 286 286 virtual const AtomicString& name() const OVERRIDE; … … 381 381 virtual bool isEmptyValue() const OVERRIDE { return innerTextValue().isEmpty(); } 382 382 virtual bool isEmptySuggestedValue() const { return suggestedValue().isEmpty(); } 383 virtual void handleFocusEvent( );383 virtual void handleFocusEvent(FocusDirection); 384 384 virtual void handleBlurEvent(); 385 385 -
trunk/Source/WebCore/html/HTMLLabelElement.cpp
r141395 r141738 156 156 } 157 157 158 void HTMLLabelElement::focus(bool )158 void HTMLLabelElement::focus(bool, FocusDirection direction) 159 159 { 160 160 // to match other browsers, always restore previous selection 161 161 if (HTMLElement* element = control()) 162 element->focus( );162 element->focus(true, direction); 163 163 } 164 164 -
trunk/Source/WebCore/html/HTMLLabelElement.h
r124022 r141738 53 53 virtual void defaultEventHandler(Event*); 54 54 55 v oid focus(bool restorePreviousSelection = true);55 virtual void focus(bool restorePreviousSelection, FocusDirection) OVERRIDE; 56 56 }; 57 57 -
trunk/Source/WebCore/html/HTMLLegendElement.cpp
r137406 r141738 68 68 } 69 69 70 void HTMLLegendElement::focus(bool )70 void HTMLLegendElement::focus(bool, FocusDirection direction) 71 71 { 72 72 if (isFocusable()) 73 Element::focus( );73 Element::focus(true, direction); 74 74 75 75 // To match other browsers' behavior, never restore previous selection. 76 76 if (HTMLFormControlElement* control = associatedControl()) 77 control->focus(false );77 control->focus(false, direction); 78 78 } 79 79 -
trunk/Source/WebCore/html/HTMLLegendElement.h
r134510 r141738 42 42 43 43 virtual void accessKeyAction(bool sendMouseEvents); 44 virtual void focus(bool restorePreviousSelection = true);44 virtual void focus(bool restorePreviousSelection, FocusDirection) OVERRIDE; 45 45 virtual HTMLFormElement* virtualForm() const OVERRIDE; 46 46 }; -
trunk/Source/WebCore/html/HTMLSelectElement.cpp
r139045 r141738 901 901 } 902 902 903 void HTMLSelectElement::dispatchFocusEvent(PassRefPtr<Node> oldFocusedNode )903 void HTMLSelectElement::dispatchFocusEvent(PassRefPtr<Node> oldFocusedNode, FocusDirection direction) 904 904 { 905 905 // Save the selection so it can be compared to the new selection when … … 907 907 if (usesMenuList()) 908 908 saveLastSelection(); 909 HTMLFormControlElementWithState::dispatchFocusEvent(oldFocusedNode );909 HTMLFormControlElementWithState::dispatchFocusEvent(oldFocusedNode, direction); 910 910 } 911 911 -
trunk/Source/WebCore/html/HTMLSelectElement.h
r136205 r141738 115 115 virtual bool isMouseFocusable() const; 116 116 117 virtual void dispatchFocusEvent(PassRefPtr<Node> oldFocusedNode );117 virtual void dispatchFocusEvent(PassRefPtr<Node> oldFocusedNode, FocusDirection) OVERRIDE; 118 118 virtual void dispatchBlurEvent(PassRefPtr<Node> newFocusedNode); 119 119 -
trunk/Source/WebCore/html/HTMLTextFormControlElement.cpp
r141570 r141738 85 85 } 86 86 87 void HTMLTextFormControlElement::dispatchFocusEvent(PassRefPtr<Node> oldFocusedNode )87 void HTMLTextFormControlElement::dispatchFocusEvent(PassRefPtr<Node> oldFocusedNode, FocusDirection direction) 88 88 { 89 89 if (supportsPlaceholder()) 90 90 updatePlaceholderVisibility(false); 91 handleFocusEvent( );92 HTMLFormControlElementWithState::dispatchFocusEvent(oldFocusedNode );91 handleFocusEvent(direction); 92 HTMLFormControlElementWithState::dispatchFocusEvent(oldFocusedNode, direction); 93 93 } 94 94 -
trunk/Source/WebCore/html/HTMLTextFormControlElement.h
r140215 r141738 119 119 TextFieldSelectionDirection computeSelectionDirection() const; 120 120 121 virtual void dispatchFocusEvent(PassRefPtr<Node> oldFocusedNode );121 virtual void dispatchFocusEvent(PassRefPtr<Node> oldFocusedNode, FocusDirection) OVERRIDE; 122 122 virtual void dispatchBlurEvent(PassRefPtr<Node> newFocusedNode); 123 123 virtual bool childShouldCreateRenderer(const NodeRenderingContext&) const OVERRIDE; … … 128 128 virtual bool isEmptySuggestedValue() const { return true; } 129 129 // Called in dispatchFocusEvent(), after placeholder process, before calling parent's dispatchFocusEvent(). 130 virtual void handleFocusEvent( ) { }130 virtual void handleFocusEvent(FocusDirection) { } 131 131 // Called in dispatchBlurEvent(), after placeholder process, before calling parent's dispatchBlurEvent(). 132 132 virtual void handleBlurEvent() { } -
trunk/Source/WebCore/html/InputType.cpp
r141395 r141738 471 471 } 472 472 473 void InputType::focus(bool restorePreviousSelection )474 { 475 element()->defaultFocus(restorePreviousSelection );473 void InputType::focus(bool restorePreviousSelection, FocusDirection direction) 474 { 475 element()->defaultFocus(restorePreviousSelection, direction); 476 476 } 477 477 -
trunk/Source/WebCore/html/InputType.h
r141395 r141738 216 216 217 217 virtual void blur(); 218 virtual void focus(bool restorePreviousSelection );218 virtual void focus(bool restorePreviousSelection, FocusDirection); 219 219 220 220 // Shadow tree handling -
trunk/Source/WebCore/page/FocusController.cpp
r140541 r141738 128 128 document->dispatchWindowEvent(Event::create(focused ? eventNames().focusEvent : eventNames().blurEvent, false, false)); 129 129 if (focused && document->focusedNode()) 130 document->focusedNode()->dispatchFocusEvent(0 );130 document->focusedNode()->dispatchFocusEvent(0, FocusDirectionNone); 131 131 } 132 132 … … 354 354 } 355 355 356 static_cast<Element*>(node.get())->focus(false );356 static_cast<Element*>(node.get())->focus(false, direction); 357 357 return true; 358 358 } … … 579 579 } 580 580 581 bool FocusController::setFocusedNode(Node* node, PassRefPtr<Frame> newFocusedFrame )581 bool FocusController::setFocusedNode(Node* node, PassRefPtr<Frame> newFocusedFrame, FocusDirection direction) 582 582 { 583 583 RefPtr<Frame> oldFocusedFrame = focusedFrame(); … … 618 618 RefPtr<Node> protect = node; 619 619 if (newDocument) { 620 bool successfullyFocused = newDocument->setFocusedNode(node );620 bool successfullyFocused = newDocument->setFocusedNode(node, direction); 621 621 if (!successfullyFocused) 622 622 return false; … … 832 832 ASSERT(element); 833 833 834 element->focus(false );834 element->focus(false, direction); 835 835 return true; 836 836 } -
trunk/Source/WebCore/page/FocusController.h
r133779 r141738 71 71 bool advanceFocus(FocusDirection, KeyboardEvent*, bool initialFocus = false); 72 72 73 bool setFocusedNode(Node*, PassRefPtr<Frame> );73 bool setFocusedNode(Node*, PassRefPtr<Frame>, FocusDirection = FocusDirectionNone); 74 74 75 75 void setActive(bool);
Note: See TracChangeset
for help on using the changeset viewer.