1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_DRAG_DROP_CLIENT_WIN_H_
6#define UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_DRAG_DROP_CLIENT_WIN_H_
7
8#include "base/compiler_specific.h"
9#include "base/memory/ref_counted.h"
10#include "ui/views/views_export.h"
11#include "ui/wm/public/drag_drop_client.h"
12
13namespace ui {
14class DragSourceWin;
15}
16
17namespace views {
18class DesktopDropTargetWin;
19
20class VIEWS_EXPORT DesktopDragDropClientWin
21    : public aura::client::DragDropClient {
22 public:
23  DesktopDragDropClientWin(aura::Window* root_window, HWND window);
24  virtual ~DesktopDragDropClientWin();
25
26  // Overridden from aura::client::DragDropClient:
27  virtual int StartDragAndDrop(
28      const ui::OSExchangeData& data,
29      aura::Window* root_window,
30      aura::Window* source_window,
31      const gfx::Point& root_location,
32      int operation,
33      ui::DragDropTypes::DragEventSource source) OVERRIDE;
34  virtual void DragUpdate(aura::Window* target,
35                          const ui::LocatedEvent& event) OVERRIDE;
36  virtual void Drop(aura::Window* target,
37                    const ui::LocatedEvent& event) OVERRIDE;
38  virtual void DragCancel() OVERRIDE;
39  virtual bool IsDragDropInProgress() OVERRIDE;
40
41  void OnNativeWidgetDestroying(HWND window);
42
43 private:
44  bool drag_drop_in_progress_;
45
46  int drag_operation_;
47
48  scoped_refptr<ui::DragSourceWin> drag_source_;
49
50  scoped_refptr<DesktopDropTargetWin> drop_target_;
51
52  DISALLOW_COPY_AND_ASSIGN(DesktopDragDropClientWin);
53};
54
55}  // namespace views
56
57#endif  // UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_DRAG_DROP_CLIENT_WIN_H_
58