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); |
| 961 Element* mouse_release_target = |
| 962 EventHandlingUtil::ParentElementIfNeeded(mev.InnerNode()); |
963 LocalFrame* subframe = | 963 LocalFrame* subframe = |
964 capturing_mouse_events_node_.Get() | 964 capturing_mouse_events_node_.Get() |
965 ? SubframeForTargetNode(capturing_mouse_events_node_.Get()) | 965 ? SubframeForTargetNode(capturing_mouse_events_node_.Get()) |
966 : SubframeForHitTestResult(mev); | 966 : SubframeForHitTestResult(mev); |
967 if (event_handler_will_reset_capturing_mouse_events_node_) | 967 if (event_handler_will_reset_capturing_mouse_events_node_) |
968 capturing_mouse_events_node_ = nullptr; | 968 capturing_mouse_events_node_ = nullptr; |
969 if (subframe) | 969 if (subframe) |
970 return PassMouseReleaseEventToSubframe(mev, subframe); | 970 return PassMouseReleaseEventToSubframe(mev, subframe); |
971 | 971 |
972 // 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... |
985 } else { | 985 } else { |
986 gesture_indicator = WTF::WrapUnique(new UserGestureIndicator( | 986 gesture_indicator = WTF::WrapUnique(new UserGestureIndicator( |
987 DocumentUserGestureToken::Create(frame_->GetDocument()))); | 987 DocumentUserGestureToken::Create(frame_->GetDocument()))); |
988 } | 988 } |
989 | 989 |
990 WebInputEventResult event_result = UpdatePointerTargetAndDispatchEvents( | 990 WebInputEventResult event_result = UpdatePointerTargetAndDispatchEvents( |
991 EventTypeNames::mouseup, mev.InnerNode(), mev.CanvasRegionId(), | 991 EventTypeNames::mouseup, mev.InnerNode(), mev.CanvasRegionId(), |
992 mev.Event(), Vector<WebMouseEvent>()); | 992 mev.Event(), Vector<WebMouseEvent>()); |
993 | 993 |
994 WebInputEventResult click_event_result = | 994 WebInputEventResult click_event_result = |
995 mouse_event_manager_->DispatchMouseClickIfNeeded(mev); | 995 mouse_release_target ? mouse_event_manager_->DispatchMouseClickIfNeeded( |
| 996 mev, *mouse_release_target) |
| 997 : WebInputEventResult::kNotHandled; |
996 | 998 |
997 scroll_manager_->ClearResizeScrollableArea(false); | 999 scroll_manager_->ClearResizeScrollableArea(false); |
998 | 1000 |
999 if (event_result == WebInputEventResult::kNotHandled) | 1001 if (event_result == WebInputEventResult::kNotHandled) |
1000 event_result = mouse_event_manager_->HandleMouseReleaseEvent(mev); | 1002 event_result = mouse_event_manager_->HandleMouseReleaseEvent(mev); |
1001 mouse_event_manager_->ClearDragHeuristicState(); | 1003 mouse_event_manager_->ClearDragHeuristicState(); |
1002 | 1004 |
1003 mouse_event_manager_->InvalidateClick(); | 1005 mouse_event_manager_->InvalidateClick(); |
1004 | 1006 |
1005 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... |
2110 MouseEventWithHitTestResults& mev, | 2112 MouseEventWithHitTestResults& mev, |
2111 LocalFrame* subframe) { | 2113 LocalFrame* subframe) { |
2112 WebInputEventResult result = | 2114 WebInputEventResult result = |
2113 subframe->GetEventHandler().HandleMouseReleaseEvent(mev.Event()); | 2115 subframe->GetEventHandler().HandleMouseReleaseEvent(mev.Event()); |
2114 if (result != WebInputEventResult::kNotHandled) | 2116 if (result != WebInputEventResult::kNotHandled) |
2115 return result; | 2117 return result; |
2116 return WebInputEventResult::kHandledSystem; | 2118 return WebInputEventResult::kHandledSystem; |
2117 } | 2119 } |
2118 | 2120 |
2119 } // namespace blink | 2121 } // namespace blink |
OLD | NEW |