desktop_drag_drop_client_win.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
1551ccae044b0ff658fe629dd67edd5ffe75d10e8Reid Spencer// Copyright (c) 2012 The Chromium Authors. All rights reserved. 27a73b80b9052136c8cd2234eb3433a07df7cf38eJohn Criswell// Use of this source code is governed by a BSD-style license that can be 37a73b80b9052136c8cd2234eb3433a07df7cf38eJohn Criswell// found in the LICENSE file. 47a73b80b9052136c8cd2234eb3433a07df7cf38eJohn Criswell 57a73b80b9052136c8cd2234eb3433a07df7cf38eJohn Criswell#include "ui/views/widget/desktop_aura/desktop_drag_drop_client_win.h" 67a73b80b9052136c8cd2234eb3433a07df7cf38eJohn Criswell 77a73b80b9052136c8cd2234eb3433a07df7cf38eJohn Criswell#include "ui/base/dragdrop/drag_drop_types.h" 87a73b80b9052136c8cd2234eb3433a07df7cf38eJohn Criswell#include "ui/base/dragdrop/drag_source_win.h" 97a73b80b9052136c8cd2234eb3433a07df7cf38eJohn Criswell#include "ui/base/dragdrop/drop_target_event.h" 107a73b80b9052136c8cd2234eb3433a07df7cf38eJohn Criswell#include "ui/base/dragdrop/os_exchange_data_provider_win.h" 117a73b80b9052136c8cd2234eb3433a07df7cf38eJohn Criswell#include "ui/views/widget/desktop_aura/desktop_drop_target_win.h" 127a73b80b9052136c8cd2234eb3433a07df7cf38eJohn Criswell#include "ui/views/widget/desktop_aura/desktop_root_window_host_win.h" 137a73b80b9052136c8cd2234eb3433a07df7cf38eJohn Criswell#include "ui/views/widget/drop_target_win.h" 147a73b80b9052136c8cd2234eb3433a07df7cf38eJohn Criswell 157a73b80b9052136c8cd2234eb3433a07df7cf38eJohn Criswellnamespace views { 167a73b80b9052136c8cd2234eb3433a07df7cf38eJohn Criswell 177a73b80b9052136c8cd2234eb3433a07df7cf38eJohn CriswellDesktopDragDropClientWin::DesktopDragDropClientWin( 188c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer aura::Window* root_window, 198c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer HWND window) 208c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer : drag_drop_in_progress_(false), 218c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer drag_operation_(0) { 228c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer drop_target_ = new DesktopDropTargetWin(root_window, window); 238c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer} 248c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer 258c8af327b83a210aed30634c908bb4b39f41eedbReid SpencerDesktopDragDropClientWin::~DesktopDragDropClientWin() { 268c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer} 278c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer 288c8af327b83a210aed30634c908bb4b39f41eedbReid Spencerint DesktopDragDropClientWin::StartDragAndDrop( 298c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer const ui::OSExchangeData& data, 308c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer aura::Window* root_window, 318c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer aura::Window* source_window, 328c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer const gfx::Point& root_location, 338c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer int operation, 348c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer ui::DragDropTypes::DragEventSource source) { 358c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer drag_drop_in_progress_ = true; 368c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer drag_operation_ = operation; 378c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer 388c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer drag_source_ = new ui::DragSourceWin; 390c803894985f80e894b36ad4de58ea4c2e906b07Brian Gaeke DWORD effect; 400c803894985f80e894b36ad4de58ea4c2e906b07Brian Gaeke HRESULT result = DoDragDrop( 410c803894985f80e894b36ad4de58ea4c2e906b07Brian Gaeke ui::OSExchangeDataProviderWin::GetIDataObject(data), 428c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer drag_source_, 438c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer ui::DragDropTypes::DragOperationToDropEffect(operation), 448c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer &effect); 454046846d2cb36a6281b853c73776584063cca19dJohn Criswell 464046846d2cb36a6281b853c73776584063cca19dJohn Criswell drag_drop_in_progress_ = false; 474046846d2cb36a6281b853c73776584063cca19dJohn Criswell 488c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer if (result != DRAGDROP_S_DROP) 498c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer effect = DROPEFFECT_NONE; 508c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer 518c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer return ui::DragDropTypes::DropEffectToDragOperation(effect); 528c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer} 538c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer 548c8af327b83a210aed30634c908bb4b39f41eedbReid Spencervoid DesktopDragDropClientWin::DragUpdate(aura::Window* target, 558c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer const ui::LocatedEvent& event) { 568c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer} 578c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer 588c8af327b83a210aed30634c908bb4b39f41eedbReid Spencervoid DesktopDragDropClientWin::Drop(aura::Window* target, 598c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer const ui::LocatedEvent& event) { 608c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer} 618c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer 628c8af327b83a210aed30634c908bb4b39f41eedbReid Spencervoid DesktopDragDropClientWin::DragCancel() { 638c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer drag_source_->CancelDrag(); 648c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer drag_operation_ = 0; 658c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer} 66394855a87d52d71b702cfbf0ec1a223bda9163d4Reid Spencer 67cbeedf73d403ca0b65b3d4151b5630c5e335055bBrian Gaekebool DesktopDragDropClientWin::IsDragDropInProgress() { 68cbeedf73d403ca0b65b3d4151b5630c5e335055bBrian Gaeke return drag_drop_in_progress_; 69cbeedf73d403ca0b65b3d4151b5630c5e335055bBrian Gaeke} 70cbeedf73d403ca0b65b3d4151b5630c5e335055bBrian Gaeke 71cbeedf73d403ca0b65b3d4151b5630c5e335055bBrian Gaekevoid DesktopDragDropClientWin::OnNativeWidgetDestroying(HWND window) { 72cbeedf73d403ca0b65b3d4151b5630c5e335055bBrian Gaeke if (drop_target_.get()) { 738c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer RevokeDragDrop(window); 748c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer drop_target_ = NULL; 758c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer } 768c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer} 778c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer 788c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer} // namespace views 798c8af327b83a210aed30634c908bb4b39f41eedbReid Spencer