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_WM_PUBLIC_DRAG_DROP_CLIENT_H_
6#define UI_WM_PUBLIC_DRAG_DROP_CLIENT_H_
7
8#include "ui/aura/aura_export.h"
9#include "ui/base/dragdrop/drag_drop_types.h"
10#include "ui/gfx/native_widget_types.h"
11
12namespace gfx {
13class Point;
14}
15
16namespace ui {
17class LocatedEvent;
18class OSExchangeData;
19}
20
21namespace aura {
22class Window;
23namespace client {
24
25// An interface implemented by an object that controls a drag and drop session.
26class AURA_EXPORT DragDropClient {
27 public:
28  virtual ~DragDropClient() {}
29
30  // Initiates a drag and drop session. Returns the drag operation that was
31  // applied at the end of the drag drop session. |root_location| is in the
32  // root Window's coordinate system.
33  virtual int StartDragAndDrop(const ui::OSExchangeData& data,
34                               aura::Window* root_window,
35                               aura::Window* source_window,
36                               const gfx::Point& root_location,
37                               int operation,
38                               ui::DragDropTypes::DragEventSource source) = 0;
39
40  // Called when mouse is dragged during a drag and drop.
41  virtual void DragUpdate(aura::Window* target,
42                          const ui::LocatedEvent& event) = 0;
43
44  // Called when mouse is released during a drag and drop.
45  virtual void Drop(aura::Window* target,
46                    const ui::LocatedEvent& event) = 0;
47
48  // Called when a drag and drop session is cancelled.
49  virtual void DragCancel() = 0;
50
51  // Returns true if a drag and drop session is in progress.
52  virtual bool IsDragDropInProgress() = 0;
53};
54
55AURA_EXPORT void SetDragDropClient(Window* root_window,
56                                   DragDropClient* client);
57AURA_EXPORT DragDropClient* GetDragDropClient(Window* root_window);
58
59}  // namespace client
60}  // namespace aura
61
62#endif  // UI_WM_PUBLIC_DRAG_DROP_CLIENT_H_
63