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