KWaylandServer

display.h
1 /*
2  SPDX-FileCopyrightText: 2014 Martin Gräßlin <[email protected]>
3  SPDX-FileCopyrightText: 2018 David Edmundson <[email protected]>
4 
5  SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
6 */
7 #pragma once
8 
9 #include <QList>
10 #include <QObject>
11 
12 #include <KWaylandServer/kwaylandserver_export.h>
13 
14 #include "clientconnection.h"
15 
16 struct wl_client;
17 struct wl_display;
18 
19 namespace KWaylandServer
20 {
21 /**
22  * @short KWayland Server.
23  *
24  * This namespace groups all classes related to the Server module.
25  *
26  * The main entry point into the KWaylandServer API is the Display class.
27  * It allows to create a Wayland server and create various global objects on it.
28  *
29  * KWaylandServer is an API to easily create a head-less Wayland server with a
30  * Qt style API.
31  *
32  * @see Display
33  */
34 
35 class ClientBuffer;
36 class ClientConnection;
37 class DisplayPrivate;
38 class OutputInterface;
39 class OutputDeviceV2Interface;
40 class SeatInterface;
41 
42 /**
43  * @brief Class holding the Wayland server display loop.
44  *
45  * @todo Improve documentation
46  */
47 class KWAYLANDSERVER_EXPORT Display : public QObject
48 {
49  Q_OBJECT
50  Q_PROPERTY(bool running READ isRunning NOTIFY runningChanged)
51 public:
52  explicit Display(QObject *parent = nullptr);
53  virtual ~Display();
54 
55  /**
56  * Adds a socket with the given @p fileDescriptor to the Wayland display. This function
57  * returns @c true if the socket has been added successfully; otherwise returns @c false.
58  *
59  * The compositor can call this function even after the display has been started.
60  * @arg socketName can optionally be parsed to store the socket name represented by the given file-descriptor
61  *
62  * @see start()
63  */
64  bool addSocketFileDescriptor(int fileDescriptor, const QString &socketName = QString());
65  /**
66  * Adds a UNIX socket with the specified @p name to the Wayland display. This function
67  * returns @c true if the socket has been added successfully; otherwise returns @c false.
68  *
69  * If the specified socket name @p name is empty, the display will pick a free socket with
70  * a filename "wayland-%d".
71  *
72  * The compositor can call this function even after the display has been started.
73  *
74  * @see start()
75  */
76  bool addSocketName(const QString &name = QString());
77 
78  /**
79  * Returns the list of socket names that the display listens for client connections.
80  */
81  QStringList socketNames() const;
82 
83  quint32 serial();
84  quint32 nextSerial();
85 
86  /**
87  * Start accepting client connections. If the display has started successfully, this
88  * function returns @c true; otherwise @c false is returned.
89  */
90  bool start();
91  void dispatchEvents();
92 
93  /**
94  * Create a client for the given file descriptor.
95  *
96  * The client is created as if it connected through the normal server
97  * socket. This method can be used to create a connection bypassing the
98  * normal socket connection. It's recommended to use together with
99  * socketpair and pass the other side of the socket to the client.
100  *
101  * @param fd The file descriptor for the socket to the client
102  * @returns The new ClientConnection or @c null on failure.
103  */
104  ClientConnection *createClient(int fd);
105 
106  operator wl_display *();
107  operator wl_display *() const;
108  bool isRunning() const;
109 
110  void createShm();
111  /**
112  * @returns All SeatInterface currently managed on the Display.
113  */
114  QVector<SeatInterface*> seats() const;
115  QList<OutputDeviceV2Interface *> outputDevices() const;
116  QList<OutputInterface *> outputs() const;
117  QVector<OutputInterface *> outputsIntersecting(const QRect &rect) const;
118 
119  /**
120  * Gets the ClientConnection for the given @p client.
121  * If there is no ClientConnection yet for the given @p client, it will be created.
122  * @param client The native client for which the ClientConnection is retrieved
123  * @return The ClientConnection for the given native client
124  */
125  ClientConnection *getConnection(wl_client *client);
126  QVector<ClientConnection *> connections() const;
127 
128  /**
129  * Set the EGL @p display for this Wayland display.
130  * The EGLDisplay can only be set once and must be alive as long as the Wayland display
131  * is alive. The user should have set up the binding between the EGLDisplay and the
132  * Wayland display prior to calling this method.
133  *
134  * @see eglDisplay
135  */
136  void setEglDisplay(void *display);
137  /**
138  * @returns the EGLDisplay used for this Wayland display or EGL_NO_DISPLAY if not set.
139  * @see setEglDisplay
140  */
141  void *eglDisplay() const;
142 
143  /**
144  * Returns the client buffer with the specified @a resource. Returns @c null if there's
145  * no such a buffer.
146  */
147  ClientBuffer *clientBufferForResource(wl_resource *resource) const;
148 
149 private Q_SLOTS:
150  void flush();
151 
152 Q_SIGNALS:
153  void socketNamesChanged();
154  void runningChanged(bool);
155  void clientConnected(KWaylandServer::ClientConnection *);
156  void clientDisconnected(KWaylandServer::ClientConnection *);
157 
158 private:
159  friend class DisplayPrivate;
161 };
162 
163 }
Class holding the Wayland server display loop.
Definition: display.h:47
Convenient Class which represents a wl_client.
The ClientBuffer class represents a client buffer.
Definition: clientbuffer.h:29
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Tue Oct 26 2021 23:08:31 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.