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 #include "client.h"
8 #include "display.h"
9 #include "primary_selection.h"
10 #include "primary_selection_p.h"
11 #include "seat_p.h"
12 #include "selection_device_p.h"
13 #include "selection_source_p.h"
14 #include "wayland/global.h"
15 #include "wayland/resource.h"
16
17 #include <unistd.h>
18
19 namespace Wrapland::Server
20 {
21
22 const struct zwp_primary_selection_device_manager_v1_interface
23 PrimarySelectionDeviceManager::Private::s_interface
24 = {
25 cb<create_source>,
26 cb<get_device>,
27 resourceDestroyCallback,
28 };
29
Private(Display * display,PrimarySelectionDeviceManager * q)30 PrimarySelectionDeviceManager::Private::Private(Display* display, PrimarySelectionDeviceManager* q)
31 : device_manager<PrimarySelectionDeviceManagerGlobal>(
32 q,
33 display,
34 &zwp_primary_selection_device_manager_v1_interface,
35 &s_interface)
36 {
37 create();
38 }
39
40 PrimarySelectionDeviceManager::Private::~Private() = default;
41
PrimarySelectionDeviceManager(Display * display,QObject * parent)42 PrimarySelectionDeviceManager::PrimarySelectionDeviceManager(Display* display, QObject* parent)
43 : QObject(parent)
44 , d_ptr(new Private(display, this))
45 {
46 }
47
48 PrimarySelectionDeviceManager::~PrimarySelectionDeviceManager() = default;
49
create_source(Client * client,uint32_t version,uint32_t id)50 void PrimarySelectionDeviceManager::create_source(Client* client, uint32_t version, uint32_t id)
51 {
52 auto source = new source_t(client, version, id);
53 if (!source) {
54 return;
55 }
56
57 Q_EMIT sourceCreated(source);
58 }
59
get_device(Client * client,uint32_t version,uint32_t id,Seat * seat)60 void PrimarySelectionDeviceManager::get_device(Client* client,
61 uint32_t version,
62 uint32_t id,
63 Seat* seat)
64 {
65 auto device = new PrimarySelectionDevice(client, version, id, seat);
66 if (!device) {
67 return;
68 }
69
70 seat->d_ptr->primary_selection_devices.register_device(device);
71 Q_EMIT deviceCreated(device);
72 }
73
74 }
75