Index: views/widget/native_widget_aura.cc |
diff --git a/views/widget/native_widget_aura.cc b/views/widget/native_widget_aura.cc |
index 8da5452a3bda5237fb9ef22eab9ea92d92fbd19f..0316b5669bf6adde47dcd6fdea9f9e6a4af26aa3 100644 |
--- a/views/widget/native_widget_aura.cc |
+++ b/views/widget/native_widget_aura.cc |
@@ -5,17 +5,21 @@ |
#include "views/widget/native_widget_aura.h" |
#include "base/bind.h" |
+#include "base/string_util.h" |
#include "ui/aura/client/aura_constants.h" |
+#include "ui/aura/client/drag_drop_client.h" |
#include "ui/aura/desktop.h" |
#include "ui/aura/desktop_observer.h" |
#include "ui/aura/event.h" |
#include "ui/aura/window.h" |
#include "ui/aura/window_types.h" |
+#include "ui/base/dragdrop/os_exchange_data.h" |
#include "ui/base/ui_base_types.h" |
#include "ui/gfx/canvas.h" |
#include "ui/gfx/compositor/layer.h" |
#include "ui/gfx/font.h" |
#include "ui/gfx/screen.h" |
+#include "views/widget/drop_helper.h" |
#include "views/widget/native_widget_delegate.h" |
#include "views/widget/tooltip_manager_views.h" |
@@ -93,6 +97,7 @@ NativeWidgetAura::NativeWidgetAura(internal::NativeWidgetDelegate* delegate) |
ALLOW_THIS_IN_INITIALIZER_LIST(close_widget_factory_(this)), |
can_activate_(true), |
cursor_(gfx::kNullCursor) { |
+ window_->set_drag_drop_delegate(this); |
} |
NativeWidgetAura::~NativeWidgetAura() { |
@@ -148,12 +153,13 @@ void NativeWidgetAura::InitNativeWidget(const Widget::InitParams& params) { |
// TODO(beng): do this some other way. |
delegate_->OnNativeWidgetSizeChanged(params.bounds.size()); |
can_activate_ = params.can_activate; |
+ DCHECK(GetWidget()->GetRootView()); |
if (params.type != Widget::InitParams::TYPE_TOOLTIP && !params.child) { |
- DCHECK(GetWidget()->GetRootView()); |
views::TooltipManagerViews* manager = new views::TooltipManagerViews( |
GetWidget()->GetRootView()); |
tooltip_manager_.reset(manager); |
} |
+ drop_helper_.reset(new DropHelper(GetWidget()->GetRootView())); |
} |
NonClientFrameView* NativeWidgetAura::CreateNonClientFrameView() { |
@@ -464,8 +470,8 @@ bool NativeWidgetAura::IsAccessibleWidget() const { |
void NativeWidgetAura::RunShellDrag(View* view, |
const ui::OSExchangeData& data, |
int operation) { |
- // http://crbug.com/97845 |
- NOTIMPLEMENTED(); |
+ aura::Desktop::GetInstance()->drag_drop_client()->StartDragAndDrop( |
+ data, operation); |
} |
void NativeWidgetAura::SchedulePaintInRect(const gfx::Rect& rect) { |
@@ -633,6 +639,37 @@ void NativeWidgetAura::OnWindowVisibilityChanged(bool visible) { |
delegate_->OnNativeWidgetVisibilityChanged(visible); |
} |
+bool NativeWidgetAura::CanDrop(const aura::DropTargetEvent& event) { |
+ DCHECK(drop_helper_.get() != NULL); |
+ View* view = drop_helper_->target_view(); |
+ if (view) |
+ return view->CanDrop(event.data()); |
+ return false; |
+} |
+ |
+void NativeWidgetAura::OnDragEntered(const aura::DropTargetEvent& event) { |
+ DCHECK(drop_helper_.get() != NULL); |
+ drop_helper_->OnDragOver(event.data(), event.location(), |
+ event.source_operations()); |
+} |
+ |
+int NativeWidgetAura::OnDragUpdated(const aura::DropTargetEvent& event) { |
+ DCHECK(drop_helper_.get() != NULL); |
+ return drop_helper_->OnDragOver(event.data(), event.location(), |
+ event.source_operations()); |
+} |
+ |
+void NativeWidgetAura::OnDragExited() { |
+ DCHECK(drop_helper_.get() != NULL); |
+ drop_helper_->OnDragExit(); |
+} |
+ |
+int NativeWidgetAura::OnPerformDrop(const aura::DropTargetEvent& event) { |
+ DCHECK(drop_helper_.get() != NULL); |
+ return drop_helper_->OnDrop(event.data(), event.location(), |
+ event.source_operations()); |
+} |
+ |
//////////////////////////////////////////////////////////////////////////////// |
// Widget, public: |