Index: ui/views/widget/desktop_aura/desktop_native_widget_aura.cc |
=================================================================== |
--- ui/views/widget/desktop_aura/desktop_native_widget_aura.cc (revision 171879) |
+++ ui/views/widget/desktop_aura/desktop_native_widget_aura.cc (working copy) |
@@ -17,10 +17,13 @@ |
#include "ui/native_theme/native_theme.h" |
#include "ui/views/corewm/compound_event_filter.h" |
#include "ui/views/corewm/input_method_event_filter.h" |
+#include "ui/views/drag_utils.h" |
#include "ui/views/ime/input_method.h" |
#include "ui/views/ime/input_method_bridge.h" |
#include "ui/views/widget/desktop_aura/desktop_root_window_host.h" |
+#include "ui/views/widget/drop_helper.h" |
#include "ui/views/widget/native_widget_aura_window_observer.h" |
+#include "ui/views/widget/root_view.h" |
#include "ui/views/widget/widget.h" |
#include "ui/views/widget/widget_aura_utils.h" |
@@ -133,6 +136,9 @@ |
desktop_root_window_host_->Init(window_, params)); |
stacking_client_.reset( |
new DesktopNativeWidgetAuraStackingClient(root_window_.get())); |
+ drop_helper_.reset(new DropHelper( |
+ static_cast<internal::RootView*>(GetWidget()->GetRootView()))); |
+ aura::client::SetDragDropDelegate(window_, this); |
aura::client::SetActivationDelegate(window_, this); |
} |
@@ -394,11 +400,13 @@ |
return false; |
} |
-void DesktopNativeWidgetAura::RunShellDrag(View* view, |
+void DesktopNativeWidgetAura::RunShellDrag( |
+ View* view, |
const ui::OSExchangeData& data, |
const gfx::Point& location, |
int operation, |
ui::DragDropTypes::DragEventSource source) { |
+ views::RunShellDrag(window_, data, location, operation, source); |
} |
void DesktopNativeWidgetAura::SchedulePaintInRect(const gfx::Rect& rect) { |
@@ -522,7 +530,7 @@ |
window_ = NULL; |
native_widget_delegate_->OnNativeWidgetDestroyed(); |
if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET) |
- delete this; |
+ delete this; |
} |
void DesktopNativeWidgetAura::OnWindowTargetVisibilityChanged(bool visible) { |
@@ -633,4 +641,31 @@ |
focus_manager->OnKeyEvent(key); |
} |
+//////////////////////////////////////////////////////////////////////////////// |
+// DesktopNativeWidgetAura, aura::WindowDragDropDelegate implementation: |
+ |
+void DesktopNativeWidgetAura::OnDragEntered(const ui::DropTargetEvent& event) { |
+ DCHECK(drop_helper_.get() != NULL); |
+ last_drop_operation_ = drop_helper_->OnDragOver(event.data(), |
+ event.location(), event.source_operations()); |
+} |
+ |
+int DesktopNativeWidgetAura::OnDragUpdated(const ui::DropTargetEvent& event) { |
+ DCHECK(drop_helper_.get() != NULL); |
+ last_drop_operation_ = drop_helper_->OnDragOver(event.data(), |
+ event.location(), event.source_operations()); |
+ return last_drop_operation_; |
+} |
+ |
+void DesktopNativeWidgetAura::OnDragExited() { |
+ DCHECK(drop_helper_.get() != NULL); |
+ drop_helper_->OnDragExit(); |
+} |
+ |
+int DesktopNativeWidgetAura::OnPerformDrop(const ui::DropTargetEvent& event) { |
+ DCHECK(drop_helper_.get() != NULL); |
+ return drop_helper_->OnDrop(event.data(), event.location(), |
+ last_drop_operation_); |
+} |
+ |
} // namespace views |