kwin/src/wayland/clientconnection.h

132 lines
3.7 KiB
C
Raw Normal View History

/*
SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
2021-03-10 16:08:30 +00:00
#pragma once
#include <sys/types.h>
#include <QObject>
2020-04-29 14:56:38 +00:00
#include <KWaylandServer/kwaylandserver_export.h>
struct wl_client;
struct wl_resource;
2020-04-29 14:56:38 +00:00
namespace KWaylandServer
{
class ClientConnectionPrivate;
class Display;
2015-09-09 11:49:58 +00:00
/**
* @brief Convenient Class which represents a wl_client.
*
* The ClientConnection gets automatically created for a wl_client when a wl_client is
2020-04-29 14:56:38 +00:00
* first used in the context of KWaylandServer. In particular the signal
2015-09-09 11:49:58 +00:00
* @link Display::clientConnected @endlink will be emitted.
*
* @see Display
*/
class KWAYLANDSERVER_EXPORT ClientConnection : public QObject
{
Q_OBJECT
public:
virtual ~ClientConnection();
2015-09-09 11:49:58 +00:00
/**
* Flushes the connection to this client. Ensures that all events are pushed to the client.
*/
2014-11-19 16:02:27 +00:00
void flush();
/**
* Get the wl_resource associated with the given @p id.
*/
wl_resource *getResource(quint32 id) const;
2014-11-19 16:02:27 +00:00
2015-09-09 11:49:58 +00:00
/**
* @returns the native wl_client this ClientConnection represents.
*/
wl_client *client() const;
2015-09-09 11:49:58 +00:00
/**
* @returns The Display this ClientConnection is connected to
*/
Display *display() const;
2015-09-09 11:49:58 +00:00
/**
* The pid of the ClientConnection endpoint.
*
* Please note: if the ClientConnection got created with @link Display::createClient @endlink
2020-04-29 14:56:38 +00:00
* the pid will be identical to the process running the KWaylandServer::Display.
2015-09-09 11:49:58 +00:00
*
* @returns The pid of the connection.
*/
pid_t processId() const;
2015-09-09 11:49:58 +00:00
/**
* The uid of the ClientConnection endpoint.
*
* Please note: if the ClientConnection got created with @link Display::createClient @endlink
2020-04-29 14:56:38 +00:00
* the uid will be identical to the process running the KWaylandServer::Display.
2015-09-09 11:49:58 +00:00
*
* @returns The uid of the connection.
*/
uid_t userId() const;
2015-09-09 11:49:58 +00:00
/**
* The gid of the ClientConnection endpoint.
*
* Please note: if the ClientConnection got created with @link Display::createClient @endlink
2020-04-29 14:56:38 +00:00
* the gid will be identical to the process running the KWaylandServer::Display.
2015-09-09 11:49:58 +00:00
*
* @returns The gid of the connection.
*/
gid_t groupId() const;
/**
* The absolute path to the executable.
*
* Please note: if the ClientConnection got created with @link Display::createClient @endlink
2020-04-29 14:56:38 +00:00
* the executablePath will be identical to the process running the KWaylandServer::Display.
*
* If the executable path cannot be resolved an empty QString is returned.
*
* @see processId
*/
QString executablePath() const;
2015-09-09 11:49:58 +00:00
/**
* Cast operator the native wl_client this ClientConnection represents.
*/
operator wl_client*();
2015-09-09 11:49:58 +00:00
/**
* Cast operator the native wl_client this ClientConnection represents.
*/
operator wl_client*() const;
/**
* Destroys this ClientConnection.
* This is a convenient wrapper around wl_client_destroy. The use case is in combination
* with ClientConnections created through @link Display::createClient @endlink. E.g. once
* the process for the ClientConnection exited, the ClientConnection needs to be destroyed, too.
*/
void destroy();
Q_SIGNALS:
/**
* This signal is emitted when the client is about to be destroyed.
*/
void aboutToBeDestroyed();
2015-09-09 11:49:58 +00:00
/**
* Signal emitted when the ClientConnection got disconnected from the server.
*/
2020-04-29 14:56:38 +00:00
void disconnected(KWaylandServer::ClientConnection*);
private:
friend class Display;
explicit ClientConnection(wl_client *c, Display *parent);
QScopedPointer<ClientConnectionPrivate> d;
};
}
2020-04-29 14:56:38 +00:00
Q_DECLARE_METATYPE(KWaylandServer::ClientConnection*)