1 /*
2     SPDX-FileCopyrightText: 2020 Adrien Faveraux <af@brain-networks.fr>
3     SPDX-FileCopyrightText: 2021 Francesco Sorrentino <francesco.sorr@gmail.com>
4 
5     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only
6 */
7 #pragma once
8 
9 #include "primary_selection.h"
10 
11 #include "seat.h"
12 #include "selection_device_manager_p.h"
13 #include "wayland/global.h"
14 #include "wayland/resource.h"
15 
16 #include <wayland-primary-selection-unstable-v1-server-protocol.h>
17 
18 namespace Wrapland::Server
19 {
20 
21 constexpr uint32_t PrimarySelectionDeviceManagerVersion = 1;
22 using PrimarySelectionDeviceManagerGlobal
23     = Wayland::Global<PrimarySelectionDeviceManager, PrimarySelectionDeviceManagerVersion>;
24 
25 class PrimarySelectionDeviceManager::Private
26     : public device_manager<PrimarySelectionDeviceManagerGlobal>
27 {
28 public:
29     Private(Display* display, PrimarySelectionDeviceManager* q);
30     ~Private() override;
31 
32 private:
33     static const struct zwp_primary_selection_device_manager_v1_interface s_interface;
34 };
35 
36 class PrimarySelectionDevice::Private : public Wayland::Resource<PrimarySelectionDevice>
37 {
38 public:
39     Private(Client* client,
40             uint32_t version,
41             uint32_t id,
42             Seat* seat,
43             PrimarySelectionDevice* qptr);
44     ~Private() override;
45 
46     Seat* m_seat;
47 
48     PrimarySelectionSource* selection = nullptr;
49     QMetaObject::Connection selectionDestroyedConnection;
50 
51     PrimarySelectionOffer* sendDataOffer(PrimarySelectionSource* source);
52 
53 private:
54     static const struct zwp_primary_selection_device_v1_interface s_interface;
55 };
56 
57 class PrimarySelectionOffer::Private : public Wayland::Resource<PrimarySelectionOffer>
58 {
59 public:
60     Private(Client* client,
61             uint32_t version,
62             PrimarySelectionSource* source,
63             PrimarySelectionOffer* qptr);
64     ~Private() override;
65 
66     PrimarySelectionSource* source;
67 
68 private:
69     static const struct zwp_primary_selection_offer_v1_interface s_interface;
70 };
71 
72 class PrimarySelectionSource::Private : public Wayland::Resource<PrimarySelectionSource>
73 {
74 public:
75     Private(Client* client, uint32_t version, uint32_t id, PrimarySelectionSource* qptr);
76     ~Private() override;
77 
78     std::vector<std::string> mimeTypes;
79 
80 private:
81     static const struct zwp_primary_selection_source_v1_interface s_interface;
82 };
83 
84 }
85