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 1045 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1056 event, data_transfer); | 1056 event, data_transfer); |
1057 } else if (new_target) { | 1057 } else if (new_target) { |
1058 // As per section 7.9.4 of the HTML 5 spec., we must always fire a drag | 1058 // As per section 7.9.4 of the HTML 5 spec., we must always fire a drag |
1059 // event before firing a dragenter, dragleave, or dragover event. | 1059 // event before firing a dragenter, dragleave, or dragover event. |
1060 if (mouse_event_manager_->GetDragState().drag_src_) { | 1060 if (mouse_event_manager_->GetDragState().drag_src_) { |
1061 // For now we don't care if event handler cancels default behavior, | 1061 // For now we don't care if event handler cancels default behavior, |
1062 // since there is none. | 1062 // since there is none. |
1063 mouse_event_manager_->DispatchDragSrcEvent(EventTypeNames::drag, event); | 1063 mouse_event_manager_->DispatchDragSrcEvent(EventTypeNames::drag, event); |
1064 } | 1064 } |
1065 event_result = mouse_event_manager_->DispatchDragEvent( | 1065 event_result = mouse_event_manager_->DispatchDragEvent( |
1066 EventTypeNames::dragenter, new_target, event, data_transfer); | 1066 EventTypeNames::dragenter, new_target, drag_target_, event, |
| 1067 data_transfer); |
1067 } | 1068 } |
1068 | 1069 |
1069 if (TargetIsFrame(drag_target_.Get(), target_frame)) { | 1070 if (TargetIsFrame(drag_target_.Get(), target_frame)) { |
1070 if (target_frame) | 1071 if (target_frame) |
1071 event_result = target_frame->GetEventHandler().UpdateDragAndDrop( | 1072 event_result = target_frame->GetEventHandler().UpdateDragAndDrop( |
1072 event, data_transfer); | 1073 event, data_transfer); |
1073 } else if (drag_target_) { | 1074 } else if (drag_target_) { |
1074 mouse_event_manager_->DispatchDragEvent( | 1075 mouse_event_manager_->DispatchDragEvent(EventTypeNames::dragleave, |
1075 EventTypeNames::dragleave, drag_target_.Get(), event, data_transfer); | 1076 drag_target_.Get(), new_target, |
| 1077 event, data_transfer); |
1076 } | 1078 } |
1077 | 1079 |
1078 if (new_target) { | 1080 if (new_target) { |
1079 // We do not explicitly call m_mouseEventManager->dispatchDragEvent here | 1081 // We do not explicitly call m_mouseEventManager->dispatchDragEvent here |
1080 // because it could ultimately result in the appearance that two dragover | 1082 // because it could ultimately result in the appearance that two dragover |
1081 // events fired. So, we mark that we should only fire a dragover event on | 1083 // events fired. So, we mark that we should only fire a dragover event on |
1082 // the next call to this function. | 1084 // the next call to this function. |
1083 should_only_fire_drag_over_event_ = true; | 1085 should_only_fire_drag_over_event_ = true; |
1084 } | 1086 } |
1085 } else { | 1087 } else { |
1086 LocalFrame* target_frame; | 1088 LocalFrame* target_frame; |
1087 if (TargetIsFrame(new_target, target_frame)) { | 1089 if (TargetIsFrame(new_target, target_frame)) { |
1088 if (target_frame) | 1090 if (target_frame) |
1089 event_result = target_frame->GetEventHandler().UpdateDragAndDrop( | 1091 event_result = target_frame->GetEventHandler().UpdateDragAndDrop( |
1090 event, data_transfer); | 1092 event, data_transfer); |
1091 } else if (new_target) { | 1093 } else if (new_target) { |
1092 // Note, when dealing with sub-frames, we may need to fire only a dragover | 1094 // Note, when dealing with sub-frames, we may need to fire only a dragover |
1093 // event as a drag event may have been fired earlier. | 1095 // event as a drag event may have been fired earlier. |
1094 if (!should_only_fire_drag_over_event_ && | 1096 if (!should_only_fire_drag_over_event_ && |
1095 mouse_event_manager_->GetDragState().drag_src_) { | 1097 mouse_event_manager_->GetDragState().drag_src_) { |
1096 // For now we don't care if event handler cancels default behavior, | 1098 // For now we don't care if event handler cancels default behavior, |
1097 // since there is none. | 1099 // since there is none. |
1098 mouse_event_manager_->DispatchDragSrcEvent(EventTypeNames::drag, event); | 1100 mouse_event_manager_->DispatchDragSrcEvent(EventTypeNames::drag, event); |
1099 } | 1101 } |
1100 event_result = mouse_event_manager_->DispatchDragEvent( | 1102 event_result = mouse_event_manager_->DispatchDragEvent( |
1101 EventTypeNames::dragover, new_target, event, data_transfer); | 1103 EventTypeNames::dragover, new_target, nullptr, event, data_transfer); |
1102 should_only_fire_drag_over_event_ = false; | 1104 should_only_fire_drag_over_event_ = false; |
1103 } | 1105 } |
1104 } | 1106 } |
1105 drag_target_ = new_target; | 1107 drag_target_ = new_target; |
1106 | 1108 |
1107 return event_result; | 1109 return event_result; |
1108 } | 1110 } |
1109 | 1111 |
1110 void EventHandler::CancelDragAndDrop(const WebMouseEvent& event, | 1112 void EventHandler::CancelDragAndDrop(const WebMouseEvent& event, |
1111 DataTransfer* data_transfer) { | 1113 DataTransfer* data_transfer) { |
1112 LocalFrame* target_frame; | 1114 LocalFrame* target_frame; |
1113 if (TargetIsFrame(drag_target_.Get(), target_frame)) { | 1115 if (TargetIsFrame(drag_target_.Get(), target_frame)) { |
1114 if (target_frame) | 1116 if (target_frame) |
1115 target_frame->GetEventHandler().CancelDragAndDrop(event, data_transfer); | 1117 target_frame->GetEventHandler().CancelDragAndDrop(event, data_transfer); |
1116 } else if (drag_target_.Get()) { | 1118 } else if (drag_target_.Get()) { |
1117 if (mouse_event_manager_->GetDragState().drag_src_) | 1119 if (mouse_event_manager_->GetDragState().drag_src_) |
1118 mouse_event_manager_->DispatchDragSrcEvent(EventTypeNames::drag, event); | 1120 mouse_event_manager_->DispatchDragSrcEvent(EventTypeNames::drag, event); |
1119 mouse_event_manager_->DispatchDragEvent( | 1121 mouse_event_manager_->DispatchDragEvent(EventTypeNames::dragleave, |
1120 EventTypeNames::dragleave, drag_target_.Get(), event, data_transfer); | 1122 drag_target_.Get(), nullptr, event, |
| 1123 data_transfer); |
1121 } | 1124 } |
1122 ClearDragState(); | 1125 ClearDragState(); |
1123 } | 1126 } |
1124 | 1127 |
1125 WebInputEventResult EventHandler::PerformDragAndDrop( | 1128 WebInputEventResult EventHandler::PerformDragAndDrop( |
1126 const WebMouseEvent& event, | 1129 const WebMouseEvent& event, |
1127 DataTransfer* data_transfer) { | 1130 DataTransfer* data_transfer) { |
1128 LocalFrame* target_frame; | 1131 LocalFrame* target_frame; |
1129 WebInputEventResult result = WebInputEventResult::kNotHandled; | 1132 WebInputEventResult result = WebInputEventResult::kNotHandled; |
1130 if (TargetIsFrame(drag_target_.Get(), target_frame)) { | 1133 if (TargetIsFrame(drag_target_.Get(), target_frame)) { |
1131 if (target_frame) | 1134 if (target_frame) |
1132 result = target_frame->GetEventHandler().PerformDragAndDrop( | 1135 result = target_frame->GetEventHandler().PerformDragAndDrop( |
1133 event, data_transfer); | 1136 event, data_transfer); |
1134 } else if (drag_target_.Get()) { | 1137 } else if (drag_target_.Get()) { |
1135 result = mouse_event_manager_->DispatchDragEvent( | 1138 result = mouse_event_manager_->DispatchDragEvent( |
1136 EventTypeNames::drop, drag_target_.Get(), event, data_transfer); | 1139 EventTypeNames::drop, drag_target_.Get(), nullptr, event, |
| 1140 data_transfer); |
1137 } | 1141 } |
1138 ClearDragState(); | 1142 ClearDragState(); |
1139 return result; | 1143 return result; |
1140 } | 1144 } |
1141 | 1145 |
1142 void EventHandler::ClearDragState() { | 1146 void EventHandler::ClearDragState() { |
1143 scroll_manager_->StopAutoscroll(); | 1147 scroll_manager_->StopAutoscroll(); |
1144 drag_target_ = nullptr; | 1148 drag_target_ = nullptr; |
1145 capturing_mouse_events_node_ = nullptr; | 1149 capturing_mouse_events_node_ = nullptr; |
1146 should_only_fire_drag_over_event_ = false; | 1150 should_only_fire_drag_over_event_ = false; |
(...skipping 962 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2109 MouseEventWithHitTestResults& mev, | 2113 MouseEventWithHitTestResults& mev, |
2110 LocalFrame* subframe) { | 2114 LocalFrame* subframe) { |
2111 WebInputEventResult result = | 2115 WebInputEventResult result = |
2112 subframe->GetEventHandler().HandleMouseReleaseEvent(mev.Event()); | 2116 subframe->GetEventHandler().HandleMouseReleaseEvent(mev.Event()); |
2113 if (result != WebInputEventResult::kNotHandled) | 2117 if (result != WebInputEventResult::kNotHandled) |
2114 return result; | 2118 return result; |
2115 return WebInputEventResult::kHandledSystem; | 2119 return WebInputEventResult::kHandledSystem; |
2116 } | 2120 } |
2117 | 2121 |
2118 } // namespace blink | 2122 } // namespace blink |
OLD | NEW |