| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/views/widget/desktop_aura/desktop_drop_target_win.h" | 5 #include "ui/views/widget/desktop_aura/desktop_drop_target_win.h" |
| 6 | 6 |
| 7 #include "base/metrics/histogram.h" | 7 #include "base/metrics/histogram.h" |
| 8 #include "base/win/win_util.h" | 8 #include "base/win/win_util.h" |
| 9 #include "ui/aura/window.h" | 9 #include "ui/aura/window.h" |
| 10 #include "ui/aura/window_tree_host.h" | 10 #include "ui/aura/window_tree_host.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 | 55 |
| 56 DesktopDropTargetWin::~DesktopDropTargetWin() { | 56 DesktopDropTargetWin::~DesktopDropTargetWin() { |
| 57 if (target_window_) | 57 if (target_window_) |
| 58 target_window_->RemoveObserver(this); | 58 target_window_->RemoveObserver(this); |
| 59 } | 59 } |
| 60 | 60 |
| 61 DWORD DesktopDropTargetWin::OnDragEnter(IDataObject* data_object, | 61 DWORD DesktopDropTargetWin::OnDragEnter(IDataObject* data_object, |
| 62 DWORD key_state, | 62 DWORD key_state, |
| 63 POINT position, | 63 POINT position, |
| 64 DWORD effect) { | 64 DWORD effect) { |
| 65 scoped_ptr<OSExchangeData> data; | 65 std::unique_ptr<OSExchangeData> data; |
| 66 scoped_ptr<ui::DropTargetEvent> event; | 66 std::unique_ptr<ui::DropTargetEvent> event; |
| 67 DragDropDelegate* delegate; | 67 DragDropDelegate* delegate; |
| 68 // Translate will call OnDragEntered. | 68 // Translate will call OnDragEntered. |
| 69 Translate(data_object, key_state, position, effect, &data, &event, &delegate); | 69 Translate(data_object, key_state, position, effect, &data, &event, &delegate); |
| 70 return ui::DragDropTypes::DragOperationToDropEffect( | 70 return ui::DragDropTypes::DragOperationToDropEffect( |
| 71 ui::DragDropTypes::DRAG_NONE); | 71 ui::DragDropTypes::DRAG_NONE); |
| 72 } | 72 } |
| 73 | 73 |
| 74 DWORD DesktopDropTargetWin::OnDragOver(IDataObject* data_object, | 74 DWORD DesktopDropTargetWin::OnDragOver(IDataObject* data_object, |
| 75 DWORD key_state, | 75 DWORD key_state, |
| 76 POINT position, | 76 POINT position, |
| 77 DWORD effect) { | 77 DWORD effect) { |
| 78 int drag_operation = ui::DragDropTypes::DRAG_NONE; | 78 int drag_operation = ui::DragDropTypes::DRAG_NONE; |
| 79 scoped_ptr<OSExchangeData> data; | 79 std::unique_ptr<OSExchangeData> data; |
| 80 scoped_ptr<ui::DropTargetEvent> event; | 80 std::unique_ptr<ui::DropTargetEvent> event; |
| 81 DragDropDelegate* delegate; | 81 DragDropDelegate* delegate; |
| 82 Translate(data_object, key_state, position, effect, &data, &event, &delegate); | 82 Translate(data_object, key_state, position, effect, &data, &event, &delegate); |
| 83 if (delegate) | 83 if (delegate) |
| 84 drag_operation = delegate->OnDragUpdated(*event); | 84 drag_operation = delegate->OnDragUpdated(*event); |
| 85 return ui::DragDropTypes::DragOperationToDropEffect(drag_operation); | 85 return ui::DragDropTypes::DragOperationToDropEffect(drag_operation); |
| 86 } | 86 } |
| 87 | 87 |
| 88 void DesktopDropTargetWin::OnDragLeave(IDataObject* data_object) { | 88 void DesktopDropTargetWin::OnDragLeave(IDataObject* data_object) { |
| 89 NotifyDragLeave(); | 89 NotifyDragLeave(); |
| 90 } | 90 } |
| 91 | 91 |
| 92 DWORD DesktopDropTargetWin::OnDrop(IDataObject* data_object, | 92 DWORD DesktopDropTargetWin::OnDrop(IDataObject* data_object, |
| 93 DWORD key_state, | 93 DWORD key_state, |
| 94 POINT position, | 94 POINT position, |
| 95 DWORD effect) { | 95 DWORD effect) { |
| 96 int drag_operation = ui::DragDropTypes::DRAG_NONE; | 96 int drag_operation = ui::DragDropTypes::DRAG_NONE; |
| 97 scoped_ptr<OSExchangeData> data; | 97 std::unique_ptr<OSExchangeData> data; |
| 98 scoped_ptr<ui::DropTargetEvent> event; | 98 std::unique_ptr<ui::DropTargetEvent> event; |
| 99 DragDropDelegate* delegate; | 99 DragDropDelegate* delegate; |
| 100 Translate(data_object, key_state, position, effect, &data, &event, &delegate); | 100 Translate(data_object, key_state, position, effect, &data, &event, &delegate); |
| 101 if (delegate) { | 101 if (delegate) { |
| 102 drag_operation = delegate->OnPerformDrop(*event); | 102 drag_operation = delegate->OnPerformDrop(*event); |
| 103 DragDropClient* client = aura::client::GetDragDropClient(root_window_); | 103 DragDropClient* client = aura::client::GetDragDropClient(root_window_); |
| 104 if (client && !client->IsDragDropInProgress() && | 104 if (client && !client->IsDragDropInProgress() && |
| 105 drag_operation != ui::DragDropTypes::DRAG_NONE) { | 105 drag_operation != ui::DragDropTypes::DRAG_NONE) { |
| 106 UMA_HISTOGRAM_COUNTS("Event.DragDrop.ExternalOriginDrop", 1); | 106 UMA_HISTOGRAM_COUNTS("Event.DragDrop.ExternalOriginDrop", 1); |
| 107 } | 107 } |
| 108 } | 108 } |
| 109 if (target_window_) { | 109 if (target_window_) { |
| 110 target_window_->RemoveObserver(this); | 110 target_window_->RemoveObserver(this); |
| 111 target_window_ = NULL; | 111 target_window_ = NULL; |
| 112 } | 112 } |
| 113 return ui::DragDropTypes::DragOperationToDropEffect(drag_operation); | 113 return ui::DragDropTypes::DragOperationToDropEffect(drag_operation); |
| 114 } | 114 } |
| 115 | 115 |
| 116 void DesktopDropTargetWin::OnWindowDestroyed(aura::Window* window) { | 116 void DesktopDropTargetWin::OnWindowDestroyed(aura::Window* window) { |
| 117 DCHECK(window == target_window_); | 117 DCHECK(window == target_window_); |
| 118 target_window_ = NULL; | 118 target_window_ = NULL; |
| 119 } | 119 } |
| 120 | 120 |
| 121 void DesktopDropTargetWin::Translate( | 121 void DesktopDropTargetWin::Translate( |
| 122 IDataObject* data_object, | 122 IDataObject* data_object, |
| 123 DWORD key_state, | 123 DWORD key_state, |
| 124 POINT position, | 124 POINT position, |
| 125 DWORD effect, | 125 DWORD effect, |
| 126 scoped_ptr<OSExchangeData>* data, | 126 std::unique_ptr<OSExchangeData>* data, |
| 127 scoped_ptr<ui::DropTargetEvent>* event, | 127 std::unique_ptr<ui::DropTargetEvent>* event, |
| 128 DragDropDelegate** delegate) { | 128 DragDropDelegate** delegate) { |
| 129 gfx::Point location(position.x, position.y); | 129 gfx::Point location(position.x, position.y); |
| 130 gfx::Point root_location = location; | 130 gfx::Point root_location = location; |
| 131 root_window_->GetHost()->ConvertPointFromNativeScreen( | 131 root_window_->GetHost()->ConvertPointFromNativeScreen( |
| 132 &root_location); | 132 &root_location); |
| 133 aura::Window* target_window = | 133 aura::Window* target_window = |
| 134 root_window_->GetEventHandlerForPoint(root_location); | 134 root_window_->GetEventHandlerForPoint(root_location); |
| 135 bool target_window_changed = false; | 135 bool target_window_changed = false; |
| 136 if (target_window != target_window_) { | 136 if (target_window != target_window_) { |
| 137 if (target_window_) | 137 if (target_window_) |
| (...skipping 28 matching lines...) Expand all Loading... |
| 166 return; | 166 return; |
| 167 DragDropDelegate* delegate = | 167 DragDropDelegate* delegate = |
| 168 aura::client::GetDragDropDelegate(target_window_); | 168 aura::client::GetDragDropDelegate(target_window_); |
| 169 if (delegate) | 169 if (delegate) |
| 170 delegate->OnDragExited(); | 170 delegate->OnDragExited(); |
| 171 target_window_->RemoveObserver(this); | 171 target_window_->RemoveObserver(this); |
| 172 target_window_ = NULL; | 172 target_window_ = NULL; |
| 173 } | 173 } |
| 174 | 174 |
| 175 } // namespace views | 175 } // namespace views |
| OLD | NEW |