| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ash/drag_drop/drag_drop_controller.h" | 5 #include "ash/drag_drop/drag_drop_controller.h" |
| 6 | 6 |
| 7 #include "ash/drag_drop/drag_image_view.h" | 7 #include "ash/drag_drop/drag_image_view.h" |
| 8 #include "ash/shell.h" | 8 #include "ash/shell.h" |
| 9 #include "ash/wm/cursor_manager.h" |
| 9 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| 10 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
| 11 #include "ui/aura/client/capture_client.h" | 12 #include "ui/aura/client/capture_client.h" |
| 12 #include "ui/aura/client/drag_drop_delegate.h" | 13 #include "ui/aura/client/drag_drop_delegate.h" |
| 13 #include "ui/aura/cursor_manager.h" | |
| 14 #include "ui/aura/env.h" | 14 #include "ui/aura/env.h" |
| 15 #include "ui/aura/root_window.h" | 15 #include "ui/aura/root_window.h" |
| 16 #include "ui/aura/window.h" | 16 #include "ui/aura/window.h" |
| 17 #include "ui/base/dragdrop/drag_drop_types.h" | 17 #include "ui/base/dragdrop/drag_drop_types.h" |
| 18 #include "ui/base/dragdrop/os_exchange_data_provider_aura.h" | 18 #include "ui/base/dragdrop/os_exchange_data_provider_aura.h" |
| 19 #include "ui/compositor/layer.h" | 19 #include "ui/compositor/layer.h" |
| 20 #include "ui/compositor/layer_animator.h" | 20 #include "ui/compositor/layer_animator.h" |
| 21 #include "ui/compositor/scoped_layer_animation_settings.h" | 21 #include "ui/compositor/scoped_layer_animation_settings.h" |
| 22 #include "ui/gfx/point.h" | 22 #include "ui/gfx/point.h" |
| 23 #include "ui/gfx/rect.h" | 23 #include "ui/gfx/rect.h" |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 drag_operation_); | 121 drag_operation_); |
| 122 e.set_flags(event.flags()); | 122 e.set_flags(event.flags()); |
| 123 int op = delegate->OnDragUpdated(e); | 123 int op = delegate->OnDragUpdated(e); |
| 124 gfx::NativeCursor cursor = ui::kCursorNoDrop; | 124 gfx::NativeCursor cursor = ui::kCursorNoDrop; |
| 125 if (op & ui::DragDropTypes::DRAG_COPY) | 125 if (op & ui::DragDropTypes::DRAG_COPY) |
| 126 cursor = ui::kCursorCopy; | 126 cursor = ui::kCursorCopy; |
| 127 else if (op & ui::DragDropTypes::DRAG_LINK) | 127 else if (op & ui::DragDropTypes::DRAG_LINK) |
| 128 cursor = ui::kCursorAlias; | 128 cursor = ui::kCursorAlias; |
| 129 else if (op & ui::DragDropTypes::DRAG_MOVE) | 129 else if (op & ui::DragDropTypes::DRAG_MOVE) |
| 130 cursor = ui::kCursorMove; | 130 cursor = ui::kCursorMove; |
| 131 aura::Env::GetInstance()->cursor_manager()->SetCursor(cursor); | 131 ash::Shell::GetInstance()->cursor_manager()->SetCursor(cursor); |
| 132 } | 132 } |
| 133 } | 133 } |
| 134 | 134 |
| 135 DCHECK(drag_image_.get()); | 135 DCHECK(drag_image_.get()); |
| 136 if (drag_image_->visible()) { | 136 if (drag_image_->visible()) { |
| 137 drag_image_->SetScreenPosition( | 137 drag_image_->SetScreenPosition( |
| 138 event.root_location().Subtract(drag_image_offset_)); | 138 event.root_location().Subtract(drag_image_offset_)); |
| 139 } | 139 } |
| 140 } | 140 } |
| 141 | 141 |
| 142 void DragDropController::Drop(aura::Window* target, | 142 void DragDropController::Drop(aura::Window* target, |
| 143 const aura::LocatedEvent& event) { | 143 const aura::LocatedEvent& event) { |
| 144 aura::Env::GetInstance()->cursor_manager()->SetCursor(ui::kCursorPointer); | 144 ash::Shell::GetInstance()->cursor_manager()->SetCursor(ui::kCursorPointer); |
| 145 aura::client::DragDropDelegate* delegate = NULL; | 145 aura::client::DragDropDelegate* delegate = NULL; |
| 146 | 146 |
| 147 // We must guarantee that a target gets a OnDragEntered before Drop. WebKit | 147 // We must guarantee that a target gets a OnDragEntered before Drop. WebKit |
| 148 // depends on not getting a Drop without DragEnter. This behavior is | 148 // depends on not getting a Drop without DragEnter. This behavior is |
| 149 // consistent with drag/drop on other platforms. | 149 // consistent with drag/drop on other platforms. |
| 150 if (target != drag_window_) | 150 if (target != drag_window_) |
| 151 DragUpdate(target, event); | 151 DragUpdate(target, event); |
| 152 DCHECK(target == drag_window_); | 152 DCHECK(target == drag_window_); |
| 153 | 153 |
| 154 if ((delegate = aura::client::GetDragDropDelegate(target))) { | 154 if ((delegate = aura::client::GetDragDropDelegate(target))) { |
| 155 aura::DropTargetEvent e( | 155 aura::DropTargetEvent e( |
| 156 *drag_data_, event.location(), event.root_location(), drag_operation_); | 156 *drag_data_, event.location(), event.root_location(), drag_operation_); |
| 157 e.set_flags(event.flags()); | 157 e.set_flags(event.flags()); |
| 158 drag_operation_ = delegate->OnPerformDrop(e); | 158 drag_operation_ = delegate->OnPerformDrop(e); |
| 159 if (drag_operation_ == 0) | 159 if (drag_operation_ == 0) |
| 160 StartCanceledAnimation(); | 160 StartCanceledAnimation(); |
| 161 else | 161 else |
| 162 drag_image_.reset(); | 162 drag_image_.reset(); |
| 163 } else { | 163 } else { |
| 164 drag_image_.reset(); | 164 drag_image_.reset(); |
| 165 } | 165 } |
| 166 | 166 |
| 167 Cleanup(); | 167 Cleanup(); |
| 168 if (should_block_during_drag_drop_) | 168 if (should_block_during_drag_drop_) |
| 169 quit_closure_.Run(); | 169 quit_closure_.Run(); |
| 170 } | 170 } |
| 171 | 171 |
| 172 void DragDropController::DragCancel() { | 172 void DragDropController::DragCancel() { |
| 173 aura::Env::GetInstance()->cursor_manager()->SetCursor(ui::kCursorPointer); | 173 ash::Shell::GetInstance()->cursor_manager()->SetCursor(ui::kCursorPointer); |
| 174 | 174 |
| 175 // |drag_window_| can be NULL if we have just started the drag and have not | 175 // |drag_window_| can be NULL if we have just started the drag and have not |
| 176 // received any DragUpdates, or, if the |drag_window_| gets destroyed during | 176 // received any DragUpdates, or, if the |drag_window_| gets destroyed during |
| 177 // a drag/drop. | 177 // a drag/drop. |
| 178 aura::client::DragDropDelegate* delegate = drag_window_? | 178 aura::client::DragDropDelegate* delegate = drag_window_? |
| 179 aura::client::GetDragDropDelegate(drag_window_) : NULL; | 179 aura::client::GetDragDropDelegate(drag_window_) : NULL; |
| 180 if (delegate) | 180 if (delegate) |
| 181 delegate->OnDragExited(); | 181 delegate->OnDragExited(); |
| 182 | 182 |
| 183 Cleanup(); | 183 Cleanup(); |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 void DragDropController::Cleanup() { | 289 void DragDropController::Cleanup() { |
| 290 if (drag_window_) | 290 if (drag_window_) |
| 291 drag_window_->RemoveObserver(this); | 291 drag_window_->RemoveObserver(this); |
| 292 drag_window_ = NULL; | 292 drag_window_ = NULL; |
| 293 drag_data_ = NULL; | 293 drag_data_ = NULL; |
| 294 drag_drop_in_progress_ = false; | 294 drag_drop_in_progress_ = false; |
| 295 } | 295 } |
| 296 | 296 |
| 297 } // namespace internal | 297 } // namespace internal |
| 298 } // namespace ash | 298 } // namespace ash |
| OLD | NEW |