Index: ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.cc |
diff --git a/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.cc b/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.cc |
index e6bd4c2e4bd82aaa0d8cb54203600025998318dc..cdaecb7791c1c38f42ed116d01450fa720b6c450 100644 |
--- a/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.cc |
+++ b/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.cc |
@@ -22,6 +22,7 @@ |
#include "ui/events/platform/platform_event_source.h" |
#include "ui/views/widget/desktop_aura/desktop_native_cursor_manager.h" |
#include "ui/views/widget/desktop_aura/x11_topmost_window_finder.h" |
+#include "ui/views/widget/desktop_aura/x11_whole_screen_move_loop.h" |
#include "ui/wm/public/drag_drop_client.h" |
#include "ui/wm/public/drag_drop_delegate.h" |
@@ -361,8 +362,7 @@ DesktopDragDropClientAuraX11::DesktopDragDropClientAuraX11( |
views::DesktopNativeCursorManager* cursor_manager, |
Display* xdisplay, |
::Window xwindow) |
- : move_loop_(this), |
- root_window_(root_window), |
+ : root_window_(root_window), |
xdisplay_(xdisplay), |
xwindow_(xwindow), |
atom_cache_(xdisplay_, kAtomsToCache), |
@@ -407,6 +407,10 @@ DesktopDragDropClientAuraX11* DesktopDragDropClientAuraX11::GetForWindow( |
return it->second; |
} |
+void DesktopDragDropClientAuraX11::Init() { |
+ move_loop_ = CreateMoveLoop(this); |
+} |
+ |
void DesktopDragDropClientAuraX11::OnXdndEnter( |
const XClientMessageEvent& event) { |
DVLOG(1) << "XdndEnter"; |
@@ -483,7 +487,7 @@ void DesktopDragDropClientAuraX11::OnXdndStatus( |
if (source_state_ == SOURCE_STATE_PENDING_DROP) { |
// We were waiting on the status message so we could send the XdndDrop. |
if (negotiated_operation_ == ui::DragDropTypes::DRAG_NONE) { |
- move_loop_.EndMoveLoop(); |
+ move_loop_->EndMoveLoop(); |
return; |
} |
source_state_ = SOURCE_STATE_DROPPED; |
@@ -493,13 +497,13 @@ void DesktopDragDropClientAuraX11::OnXdndStatus( |
switch (negotiated_operation_) { |
case ui::DragDropTypes::DRAG_COPY: |
- move_loop_.UpdateCursor(copy_grab_cursor_); |
+ move_loop_->UpdateCursor(copy_grab_cursor_); |
break; |
case ui::DragDropTypes::DRAG_MOVE: |
- move_loop_.UpdateCursor(move_grab_cursor_); |
+ move_loop_->UpdateCursor(move_grab_cursor_); |
break; |
default: |
- move_loop_.UpdateCursor(grab_cursor_); |
+ move_loop_->UpdateCursor(grab_cursor_); |
break; |
} |
@@ -534,7 +538,7 @@ void DesktopDragDropClientAuraX11::OnXdndFinished( |
// Clear |source_current_window_| to avoid sending XdndLeave upon ending the |
// move loop. |
source_current_window_ = None; |
- move_loop_.EndMoveLoop(); |
+ move_loop_->EndMoveLoop(); |
} |
void DesktopDragDropClientAuraX11::OnXdndDrop( |
@@ -627,12 +631,12 @@ int DesktopDragDropClientAuraX11::StartDragAndDrop( |
// Windows has a specific method, DoDragDrop(), which performs the entire |
// drag. We have to emulate this, so we spin off a nested runloop which will |
// track all cursor movement and reroute events to a specific handler. |
- move_loop_.SetDragImage(source_provider_->GetDragImage(), |
- source_provider_->GetDragImageOffset()); |
- move_loop_.RunMoveLoop(source_window, grab_cursor_); |
+ move_loop_->SetDragImage(source_provider_->GetDragImage(), |
+ source_provider_->GetDragImageOffset()); |
+ move_loop_->RunMoveLoop(source_window, grab_cursor_); |
if (alive) { |
- move_loop_.SetDragImage(gfx::ImageSkia(), gfx::Vector2dF()); |
+ move_loop_->SetDragImage(gfx::ImageSkia(), gfx::Vector2dF()); |
source_provider_ = NULL; |
g_current_drag_drop_client = NULL; |
@@ -656,7 +660,7 @@ void DesktopDragDropClientAuraX11::Drop(aura::Window* target, |
} |
void DesktopDragDropClientAuraX11::DragCancel() { |
- move_loop_.EndMoveLoop(); |
+ move_loop_->EndMoveLoop(); |
} |
bool DesktopDragDropClientAuraX11::IsDragDropInProgress() { |
@@ -679,7 +683,7 @@ void DesktopDragDropClientAuraX11::OnMouseReleased() { |
if (source_state_ != SOURCE_STATE_OTHER) { |
// The user has previously released the mouse and is clicking in |
// frustration. |
- move_loop_.EndMoveLoop(); |
+ move_loop_->EndMoveLoop(); |
return; |
} |
@@ -696,7 +700,7 @@ void DesktopDragDropClientAuraX11::OnMouseReleased() { |
return; |
} |
- move_loop_.EndMoveLoop(); |
+ move_loop_->EndMoveLoop(); |
return; |
} |
@@ -715,7 +719,7 @@ void DesktopDragDropClientAuraX11::OnMouseReleased() { |
} |
} |
- move_loop_.EndMoveLoop(); |
+ move_loop_->EndMoveLoop(); |
} |
void DesktopDragDropClientAuraX11::OnMoveLoopEnded() { |
@@ -728,6 +732,11 @@ void DesktopDragDropClientAuraX11::OnMoveLoopEnded() { |
end_move_loop_timer_.Stop(); |
} |
+scoped_ptr<X11MoveLoop> DesktopDragDropClientAuraX11::CreateMoveLoop( |
+ X11MoveLoopDelegate* delegate) { |
+ return scoped_ptr<X11MoveLoop>(new X11WholeScreenMoveLoop(this)); |
+} |
+ |
XID DesktopDragDropClientAuraX11::FindWindowFor( |
const gfx::Point& screen_point) { |
views::X11TopmostWindowFinder finder; |
@@ -832,7 +841,7 @@ void DesktopDragDropClientAuraX11::StartEndMoveLoopTimer() { |
} |
void DesktopDragDropClientAuraX11::EndMoveLoop() { |
- move_loop_.EndMoveLoop(); |
+ move_loop_->EndMoveLoop(); |
} |
void DesktopDragDropClientAuraX11::DragTranslate( |