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 |