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