| 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 |