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 |