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 #pragma once
0008 
0009 #include "kwin_export.h"
0010 
0011 #include "abstract_data_source.h"
0012 #include "datadevicemanager.h"
0013 
0014 namespace KWin
0015 {
0016 class DataSourceInterfacePrivate;
0017 class XdgToplevelDragV1Interface;
0018 
0019 /**
0020  * @brief Represents the Resource for the wl_data_source interface.
0021  */
0022 class KWIN_EXPORT DataSourceInterface : public AbstractDataSource
0023 {
0024     Q_OBJECT
0025 public:
0026     virtual ~DataSourceInterface();
0027 
0028     void accept(const QString &mimeType) override;
0029     void requestData(const QString &mimeType, qint32 fd) override;
0030     void cancel() override;
0031 
0032     QStringList mimeTypes() const override;
0033 
0034     static DataSourceInterface *get(wl_resource *native);
0035 
0036     /**
0037      * @returns The Drag and Drop actions supported by this DataSourceInterface.
0038      */
0039     DataDeviceManagerInterface::DnDActions supportedDragAndDropActions() const override;
0040     DataDeviceManagerInterface::DnDAction selectedDndAction() const override;
0041     void dropPerformed() override;
0042     void dndFinished() override;
0043     void dndAction(DataDeviceManagerInterface::DnDAction action) override;
0044     void dndCancelled() override;
0045 
0046     bool isDndCancelled() const;
0047     bool isDropPerformed() const;
0048 
0049     wl_resource *resource() const;
0050 
0051     wl_client *client() const override;
0052 
0053     bool isAccepted() const override;
0054     void setAccepted(bool accepted);
0055 
0056     XdgToplevelDragV1Interface *xdgToplevelDrag() const;
0057 
0058 private:
0059     friend class DataDeviceManagerInterfacePrivate;
0060     friend class DataSourceInterfacePrivate;
0061     explicit DataSourceInterface(wl_resource *resource);
0062 
0063     std::unique_ptr<DataSourceInterfacePrivate> d;
0064 };
0065 
0066 }
0067 
0068 Q_DECLARE_METATYPE(KWin::DataSourceInterface *)