File indexing completed on 2024-05-19 05:32:33

0001 /*
0002     SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
0003     SPDX-FileCopyrightText: 2020 David Edmundson <davidedmundson@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006 */
0007 
0008 #pragma once
0009 
0010 #include <QPointer>
0011 
0012 #include "qwayland-server-wayland.h"
0013 
0014 namespace KWin
0015 {
0016 class AbstractDataSource;
0017 class DataDeviceInterface;
0018 class DataOfferInterface;
0019 class DataSourceInterface;
0020 class DragAndDropIcon;
0021 class SeatInterface;
0022 class SurfaceInterface;
0023 
0024 class DataDeviceInterfacePrivate : public QtWaylandServer::wl_data_device
0025 {
0026 public:
0027     static DataDeviceInterfacePrivate *get(DataDeviceInterface *device);
0028 
0029     DataDeviceInterfacePrivate(SeatInterface *seat, DataDeviceInterface *_q, wl_resource *resource);
0030 
0031     DataOfferInterface *createDataOffer(AbstractDataSource *source);
0032 
0033     SeatInterface *seat;
0034     DataDeviceInterface *q;
0035     QPointer<DataSourceInterface> selection;
0036 
0037     struct Drag
0038     {
0039         SurfaceInterface *surface = nullptr;
0040         QMetaObject::Connection destroyConnection;
0041         QMetaObject::Connection posConnection;
0042         QMetaObject::Connection sourceActionConnection;
0043         QMetaObject::Connection targetActionConnection;
0044         quint32 serial = 0;
0045     };
0046     Drag drag;
0047 
0048 protected:
0049     void data_device_destroy_resource(Resource *resource) override;
0050     void data_device_start_drag(Resource *resource, wl_resource *source, wl_resource *origin, wl_resource *icon, uint32_t serial) override;
0051     void data_device_set_selection(Resource *resource, wl_resource *source, uint32_t serial) override;
0052     void data_device_release(Resource *resource) override;
0053 };
0054 
0055 } // namespace KWin