OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights |
3 * reserved. | 3 * reserved. |
4 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 4 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
5 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) | 5 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) |
6 * | 6 * |
7 * Redistribution and use in source and binary forms, with or without | 7 * Redistribution and use in source and binary forms, with or without |
8 * modification, are permitted provided that the following conditions | 8 * modification, are permitted provided that the following conditions |
9 * are met: | 9 * are met: |
10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
645 if (is_middle_click_autoscroll_in_progress) { | 645 if (is_middle_click_autoscroll_in_progress) { |
646 // We invalidate the click when exiting middle click auto scroll so that | 646 // We invalidate the click when exiting middle click auto scroll so that |
647 // we don't inadvertently navigate away from the current page (e.g. the | 647 // we don't inadvertently navigate away from the current page (e.g. the |
648 // click was on a hyperlink). See <rdar://problem/6095023>. | 648 // click was on a hyperlink). See <rdar://problem/6095023>. |
649 mouse_event_manager_->InvalidateClick(); | 649 mouse_event_manager_->InvalidateClick(); |
650 return WebInputEventResult::kHandledSuppressed; | 650 return WebInputEventResult::kHandledSuppressed; |
651 } | 651 } |
652 } | 652 } |
653 | 653 |
654 mouse_event_manager_->SetClickCount(mouse_event.click_count); | 654 mouse_event_manager_->SetClickCount(mouse_event.click_count); |
655 mouse_event_manager_->SetClickNode( | 655 mouse_event_manager_->SetClickElement( |
656 mev.InnerNode()->IsTextNode() | 656 EventHandlingUtil::ParentElementIfNeeded(mev.InnerNode())); |
657 ? FlatTreeTraversal::Parent(*mev.InnerNode()) | |
658 : mev.InnerNode()); | |
659 | 657 |
660 if (!mouse_event.FromTouch()) | 658 if (!mouse_event.FromTouch()) |
661 frame_->Selection().SetCaretBlinkingSuspended(true); | 659 frame_->Selection().SetCaretBlinkingSuspended(true); |
662 | 660 |
663 WebInputEventResult event_result = UpdatePointerTargetAndDispatchEvents( | 661 WebInputEventResult event_result = UpdatePointerTargetAndDispatchEvents( |
664 EventTypeNames::mousedown, mev.InnerNode(), mev.CanvasRegionId(), | 662 EventTypeNames::mousedown, mev.InnerNode(), mev.CanvasRegionId(), |
665 mev.Event(), Vector<WebMouseEvent>()); | 663 mev.Event(), Vector<WebMouseEvent>()); |
666 | 664 |
667 if (event_result == WebInputEventResult::kNotHandled && frame_->View()) { | 665 if (event_result == WebInputEventResult::kNotHandled && frame_->View()) { |
668 FrameView* view = frame_->View(); | 666 FrameView* view = frame_->View(); |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
953 String(), mouse_event, Vector<WebMouseEvent>()); | 951 String(), mouse_event, Vector<WebMouseEvent>()); |
954 } | 952 } |
955 | 953 |
956 // Mouse events simulated from touch should not hit-test again. | 954 // Mouse events simulated from touch should not hit-test again. |
957 ASSERT(!mouse_event.FromTouch()); | 955 ASSERT(!mouse_event.FromTouch()); |
958 | 956 |
959 HitTestRequest::HitTestRequestType hit_type = HitTestRequest::kRelease; | 957 HitTestRequest::HitTestRequestType hit_type = HitTestRequest::kRelease; |
960 HitTestRequest request(hit_type); | 958 HitTestRequest request(hit_type); |
961 MouseEventWithHitTestResults mev = | 959 MouseEventWithHitTestResults mev = |
962 EventHandlingUtil::PerformMouseEventHitTest(frame_, request, mouse_event); | 960 EventHandlingUtil::PerformMouseEventHitTest(frame_, request, mouse_event); |
963 Node* release_node = (mev.InnerNode() && mev.InnerNode()->IsTextNode()) | 961 Element* mouse_release_target = |
964 ? FlatTreeTraversal::Parent(*mev.InnerNode()) | 962 EventHandlingUtil::ParentElementIfNeeded(mev.InnerNode()); |
965 : mev.InnerNode(); | |
966 LocalFrame* subframe = | 963 LocalFrame* subframe = |
967 capturing_mouse_events_node_.Get() | 964 capturing_mouse_events_node_.Get() |
968 ? SubframeForTargetNode(capturing_mouse_events_node_.Get()) | 965 ? SubframeForTargetNode(capturing_mouse_events_node_.Get()) |
969 : SubframeForHitTestResult(mev); | 966 : SubframeForHitTestResult(mev); |
970 if (event_handler_will_reset_capturing_mouse_events_node_) | 967 if (event_handler_will_reset_capturing_mouse_events_node_) |
971 capturing_mouse_events_node_ = nullptr; | 968 capturing_mouse_events_node_ = nullptr; |
972 if (subframe) | 969 if (subframe) |
973 return PassMouseReleaseEventToSubframe(mev, subframe); | 970 return PassMouseReleaseEventToSubframe(mev, subframe); |
974 | 971 |
975 // Mouse events will be associated with the Document where mousedown | 972 // Mouse events will be associated with the Document where mousedown |
(...skipping 12 matching lines...) Expand all Loading... |
988 } else { | 985 } else { |
989 gesture_indicator = WTF::WrapUnique(new UserGestureIndicator( | 986 gesture_indicator = WTF::WrapUnique(new UserGestureIndicator( |
990 DocumentUserGestureToken::Create(frame_->GetDocument()))); | 987 DocumentUserGestureToken::Create(frame_->GetDocument()))); |
991 } | 988 } |
992 | 989 |
993 WebInputEventResult event_result = UpdatePointerTargetAndDispatchEvents( | 990 WebInputEventResult event_result = UpdatePointerTargetAndDispatchEvents( |
994 EventTypeNames::mouseup, mev.InnerNode(), mev.CanvasRegionId(), | 991 EventTypeNames::mouseup, mev.InnerNode(), mev.CanvasRegionId(), |
995 mev.Event(), Vector<WebMouseEvent>()); | 992 mev.Event(), Vector<WebMouseEvent>()); |
996 | 993 |
997 WebInputEventResult click_event_result = | 994 WebInputEventResult click_event_result = |
998 mouse_event_manager_->DispatchMouseClickIfNeeded(mev, release_node); | 995 mouse_release_target ? mouse_event_manager_->DispatchMouseClickIfNeeded( |
| 996 mev, *mouse_release_target) |
| 997 : WebInputEventResult::kNotHandled; |
999 | 998 |
1000 scroll_manager_->ClearResizeScrollableArea(false); | 999 scroll_manager_->ClearResizeScrollableArea(false); |
1001 | 1000 |
1002 if (event_result == WebInputEventResult::kNotHandled) | 1001 if (event_result == WebInputEventResult::kNotHandled) |
1003 event_result = mouse_event_manager_->HandleMouseReleaseEvent(mev); | 1002 event_result = mouse_event_manager_->HandleMouseReleaseEvent(mev); |
1004 mouse_event_manager_->ClearDragHeuristicState(); | 1003 mouse_event_manager_->ClearDragHeuristicState(); |
1005 | 1004 |
1006 mouse_event_manager_->InvalidateClick(); | 1005 mouse_event_manager_->InvalidateClick(); |
1007 | 1006 |
1008 return EventHandlingUtil::MergeEventResult(click_event_result, event_result); | 1007 return EventHandlingUtil::MergeEventResult(click_event_result, event_result); |
(...skipping 1104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2113 MouseEventWithHitTestResults& mev, | 2112 MouseEventWithHitTestResults& mev, |
2114 LocalFrame* subframe) { | 2113 LocalFrame* subframe) { |
2115 WebInputEventResult result = | 2114 WebInputEventResult result = |
2116 subframe->GetEventHandler().HandleMouseReleaseEvent(mev.Event()); | 2115 subframe->GetEventHandler().HandleMouseReleaseEvent(mev.Event()); |
2117 if (result != WebInputEventResult::kNotHandled) | 2116 if (result != WebInputEventResult::kNotHandled) |
2118 return result; | 2117 return result; |
2119 return WebInputEventResult::kHandledSystem; | 2118 return WebInputEventResult::kHandledSystem; |
2120 } | 2119 } |
2121 | 2120 |
2122 } // namespace blink | 2121 } // namespace blink |
OLD | NEW |