| Index: ash/drag_drop/drag_drop_controller.cc
|
| diff --git a/ash/drag_drop/drag_drop_controller.cc b/ash/drag_drop/drag_drop_controller.cc
|
| index c13e0875d94c21a938f2ee6afd7285d7b1ea239d..1500dae1913f88674b162c338b565e37e79a55b9 100644
|
| --- a/ash/drag_drop/drag_drop_controller.cc
|
| +++ b/ash/drag_drop/drag_drop_controller.cc
|
| @@ -16,11 +16,14 @@
|
| #include "ui/aura/env.h"
|
| #include "ui/aura/root_window.h"
|
| #include "ui/aura/window.h"
|
| +#include "ui/aura/window_delegate.h"
|
| #include "ui/base/animation/linear_animation.h"
|
| #include "ui/base/dragdrop/drag_drop_types.h"
|
| #include "ui/base/dragdrop/os_exchange_data.h"
|
| #include "ui/base/events/event.h"
|
| #include "ui/base/events/event_utils.h"
|
| +#include "ui/base/hit_test.h"
|
| +#include "ui/gfx/path.h"
|
| #include "ui/gfx/point.h"
|
| #include "ui/gfx/rect.h"
|
| #include "ui/gfx/rect_conversions.h"
|
| @@ -77,6 +80,61 @@ void DispatchGestureEndToWindow(aura::Window* window) {
|
| }
|
| } // namespace
|
|
|
| +class DragDropTrackerDelegate : public aura::WindowDelegate {
|
| + public:
|
| + explicit DragDropTrackerDelegate(DragDropController* controller)
|
| + : drag_drop_controller_(controller) {}
|
| + virtual ~DragDropTrackerDelegate() {}
|
| +
|
| + // Overridden from WindowDelegate:
|
| + virtual gfx::Size GetMinimumSize() const OVERRIDE {
|
| + return gfx::Size();
|
| + }
|
| +
|
| + virtual gfx::Size GetMaximumSize() const OVERRIDE {
|
| + return gfx::Size();
|
| + }
|
| +
|
| + virtual void OnBoundsChanged(const gfx::Rect& old_bounds,
|
| + const gfx::Rect& new_bounds) OVERRIDE {}
|
| + virtual gfx::NativeCursor GetCursor(const gfx::Point& point) OVERRIDE {
|
| + return gfx::kNullCursor;
|
| + }
|
| + virtual int GetNonClientComponent(const gfx::Point& point) const OVERRIDE {
|
| + return HTCAPTION;
|
| + }
|
| + virtual bool ShouldDescendIntoChildForEventHandling(
|
| + aura::Window* child,
|
| + const gfx::Point& location) OVERRIDE {
|
| + return true;
|
| + }
|
| + virtual bool CanFocus() OVERRIDE { return true; }
|
| + virtual void OnCaptureLost() OVERRIDE {
|
| + if (drag_drop_controller_->IsDragDropInProgress())
|
| + drag_drop_controller_->DragCancel();
|
| + }
|
| + virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
|
| + }
|
| + virtual void OnDeviceScaleFactorChanged(float device_scale_factor) OVERRIDE {}
|
| + virtual void OnWindowDestroying() OVERRIDE {}
|
| + virtual void OnWindowDestroyed() OVERRIDE {}
|
| + virtual void OnWindowTargetVisibilityChanged(bool visible) OVERRIDE {}
|
| + virtual bool HasHitTestMask() const OVERRIDE {
|
| + return true;
|
| + }
|
| + virtual void GetHitTestMask(gfx::Path* mask) const OVERRIDE {
|
| + DCHECK(mask->isEmpty());
|
| + }
|
| + virtual scoped_refptr<ui::Texture> CopyTexture() OVERRIDE {
|
| + return scoped_refptr<ui::Texture>();
|
| + }
|
| +
|
| + private:
|
| + DragDropController* drag_drop_controller_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DragDropTrackerDelegate);
|
| +};
|
| +
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // DragDropController, public:
|
|
|
| @@ -87,6 +145,8 @@ DragDropController::DragDropController()
|
| drag_window_(NULL),
|
| drag_source_window_(NULL),
|
| should_block_during_drag_drop_(true),
|
| + ALLOW_THIS_IN_INITIALIZER_LIST(
|
| + drag_drop_window_delegate_(new DragDropTrackerDelegate(this))),
|
| current_drag_event_source_(ui::DragDropTypes::DRAG_EVENT_SOURCE_MOUSE),
|
| weak_factory_(this) {
|
| Shell::GetInstance()->AddPreTargetHandler(this);
|
| @@ -118,7 +178,8 @@ int DragDropController::StartDragAndDrop(
|
| return 0;
|
|
|
| current_drag_event_source_ = source;
|
| - DragDropTracker* tracker = new DragDropTracker(root_window);
|
| + DragDropTracker* tracker =
|
| + new DragDropTracker(root_window, drag_drop_window_delegate_.get());
|
| if (source == ui::DragDropTypes::DRAG_EVENT_SOURCE_TOUCH) {
|
| // We need to transfer the current gesture sequence and the GR's touch event
|
| // queue to the |drag_drop_tracker_|'s capture window so that when it takes
|
|
|