KWin
Loading...
Searching...
No Matches
drmlease_v1_p.h
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2021-2022 Xaver Hugl <xaver.hugl@gmail.com>
3
4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5*/
6#pragma once
7
8#include <qwayland-server-drm-lease-v1.h>
9
15
16#include <QObject>
17#include <QPointer>
18#include <QQueue>
19
20namespace KWin
21{
22
23class Display;
24class DrmLeaseConnectorV1Interface;
25class DrmLeaseRequestV1Interface;
26class DrmLeaseV1Interface;
27
28class DrmLeaseDeviceV1Interface : public QObject, public QtWaylandServer::wp_drm_lease_device_v1
29{
30public:
31 explicit DrmLeaseDeviceV1Interface(Display *display, DrmGpu *gpu);
33
34 void addOutput(DrmAbstractOutput *output);
35 void removeOutput(DrmAbstractOutput *output);
36 void setDrmMaster(bool hasDrmMaster);
37 void done();
38 void remove();
41 void addLease(DrmLeaseV1Interface *lease);
44
45 bool hasDrmMaster() const;
46 DrmGpu *gpu() const;
47
48private:
49 void wp_drm_lease_device_v1_create_lease_request(Resource *resource, uint32_t id) override;
50 void wp_drm_lease_device_v1_release(Resource *resource) override;
51 void wp_drm_lease_device_v1_bind_resource(Resource *resource) override;
52 void wp_drm_lease_device_v1_destroy_global() override;
53
54 DrmGpu *const m_gpu;
55 bool m_hasDrmMaster = true;
56 std::map<DrmAbstractOutput *, std::unique_ptr<DrmLeaseConnectorV1Interface>> m_connectors;
57 QQueue<wl_resource *> m_pendingFds;
58 QList<DrmLeaseRequestV1Interface *> m_leaseRequests;
59 QList<DrmLeaseV1Interface *> m_leases;
60};
61
62class DrmLeaseConnectorV1Interface : public QObject, public QtWaylandServer::wp_drm_lease_connector_v1
63{
64 Q_OBJECT
65public:
67
68 uint32_t id() const;
69 void send(wl_resource *resource);
70 void withdraw();
71
73 DrmOutput *output() const;
74 bool withdrawn() const;
75
76private:
77 void wp_drm_lease_connector_v1_destroy(Resource *resource) override;
78
79 QPointer<DrmLeaseDeviceV1Interface> m_device;
80 bool m_withdrawn = false;
81 DrmOutput *const m_output;
82};
83
84class DrmLeaseRequestV1Interface : public QtWaylandServer::wp_drm_lease_request_v1
85{
86public:
87 DrmLeaseRequestV1Interface(DrmLeaseDeviceV1Interface *device, wl_resource *resource);
89
90 QList<DrmLeaseConnectorV1Interface *> connectors() const;
91 void invalidate();
92
93protected:
94 void wp_drm_lease_request_v1_request_connector(Resource *resource, struct ::wl_resource *connector) override;
95 void wp_drm_lease_request_v1_submit(Resource *resource, uint32_t id) override;
96 void wp_drm_lease_request_v1_destroy_resource(Resource *resource) override;
97
99 QList<DrmLeaseConnectorV1Interface *> m_connectors;
100 bool m_invalid = false;
101};
102
103class DrmLeaseV1Interface : public QObject, private QtWaylandServer::wp_drm_lease_v1
104{
105 Q_OBJECT
106public:
107 DrmLeaseV1Interface(DrmLeaseDeviceV1Interface *device, const QList<DrmLeaseConnectorV1Interface *> &connectors, wl_resource *resource);
109
110 void grant(std::unique_ptr<DrmLease> &&lease);
111 void deny();
112 void revoke();
113
114 QList<DrmLeaseConnectorV1Interface *> connectors() const;
115
116private:
118 QList<DrmLeaseConnectorV1Interface *> m_connectors;
119 std::unique_ptr<DrmLease> m_lease;
120 bool m_finished = false;
121
122 void wp_drm_lease_v1_destroy(Resource *resource) override;
123 void wp_drm_lease_v1_destroy_resource(Resource *resource) override;
124};
125
126}
Class holding the Wayland server display loop.
Definition display.h:34
void send(wl_resource *resource)
DrmLeaseDeviceV1Interface * device() const
DrmLeaseConnectorV1Interface(DrmLeaseDeviceV1Interface *leaseDevice, DrmOutput *output)
void setDrmMaster(bool hasDrmMaster)
DrmLeaseDeviceV1Interface(Display *display, DrmGpu *gpu)
void addLease(DrmLeaseV1Interface *lease)
void offerConnector(DrmLeaseConnectorV1Interface *connector)
void addLeaseRequest(DrmLeaseRequestV1Interface *leaseRequest)
void removeLeaseRequest(DrmLeaseRequestV1Interface *leaseRequest)
void removeOutput(DrmAbstractOutput *output)
void removeLease(DrmLeaseV1Interface *lease)
void addOutput(DrmAbstractOutput *output)
QList< DrmLeaseConnectorV1Interface * > m_connectors
void wp_drm_lease_request_v1_request_connector(Resource *resource, struct ::wl_resource *connector) override
QList< DrmLeaseConnectorV1Interface * > connectors() const
DrmLeaseRequestV1Interface(DrmLeaseDeviceV1Interface *device, wl_resource *resource)
void wp_drm_lease_request_v1_destroy_resource(Resource *resource) override
void wp_drm_lease_request_v1_submit(Resource *resource, uint32_t id) override
DrmLeaseDeviceV1Interface *const m_device
DrmLeaseV1Interface(DrmLeaseDeviceV1Interface *device, const QList< DrmLeaseConnectorV1Interface * > &connectors, wl_resource *resource)
void grant(std::unique_ptr< DrmLease > &&lease)
QList< DrmLeaseConnectorV1Interface * > connectors() const
struct _XDisplay Display