1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- // Copyright (c) 2012 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef UI_AURA_CLIENT_DRAG_DROP_DELEGATE_H_
- #define UI_AURA_CLIENT_DRAG_DROP_DELEGATE_H_
- #include <memory>
- #include "base/callback.h"
- #include "ui/aura/aura_export.h"
- #include "ui/aura/window.h"
- #include "ui/base/data_transfer_policy/data_transfer_endpoint.h"
- #include "ui/base/dragdrop/drag_drop_types.h"
- #include "ui/base/dragdrop/mojom/drag_drop_types.mojom-forward.h"
- #include "ui/base/dragdrop/os_exchange_data.h"
- namespace ui {
- class DropTargetEvent;
- }
- namespace aura {
- class Window;
- namespace client {
- struct AURA_EXPORT DragUpdateInfo {
- DragUpdateInfo();
- DragUpdateInfo(int op, ui::DataTransferEndpoint endpoint);
- DragUpdateInfo(const DragUpdateInfo& update_info);
- DragUpdateInfo& operator=(const DragUpdateInfo& update_info);
- // A bitmask of the DragDropTypes::DragOperation supported.
- int drag_operation = ui::DragDropTypes::DRAG_NONE;
- // An object representing the destination window.
- ui::DataTransferEndpoint data_endpoint{ui::EndpointType::kDefault};
- };
- // Delegate interface for drag and drop actions on aura::Window.
- class AURA_EXPORT DragDropDelegate {
- public:
- // Callback emitted by GetDropCallback used to handle deferred drop events.
- // Note that it does not contain a location. If implementers need a location,
- // they should bind it in GetDropCallback. See crbug.com/1289902.
- using DropCallback =
- base::OnceCallback<void(std::unique_ptr<ui::OSExchangeData> data,
- ui::mojom::DragOperation& output_drag_op)>;
- // OnDragEntered is invoked when the mouse enters this window during a drag &
- // drop session. This is immediately followed by an invocation of
- // OnDragUpdated, and eventually one of OnDragExited, or GetDropCallback.
- virtual void OnDragEntered(const ui::DropTargetEvent& event) = 0;
- // Invoked during a drag and drop session while the mouse is over the window.
- // This should return DragUpdateInfo object based on the location of the
- // event.
- virtual DragUpdateInfo OnDragUpdated(const ui::DropTargetEvent& event) = 0;
- // Invoked during a drag and drop session when the mouse exits the window, or
- // when the drag session was canceled and the mouse was over the window.
- virtual void OnDragExited() = 0;
- // Invoked during a drag and drop session when the user release the mouse, but
- // the drop is held because of the DataTransferPolicyController.
- // The returned callback may be NullCallback if there's nothing to do and the
- // drop event is ignored.
- virtual DropCallback GetDropCallback(const ui::DropTargetEvent& event) = 0;
- protected:
- virtual ~DragDropDelegate() {}
- };
- AURA_EXPORT void SetDragDropDelegate(Window* window,
- DragDropDelegate* delegate);
- AURA_EXPORT DragDropDelegate* GetDragDropDelegate(Window* window);
- AURA_EXPORT extern const WindowProperty<DragDropDelegate*>* const
- kDragDropDelegateKey;
- } // namespace client
- } // namespace aura
- #endif // UI_AURA_CLIENT_DRAG_DROP_DELEGATE_H_
|