kwin/src/session.h
2022-06-21 17:50:49 +00:00

119 lines
2.9 KiB
C++

/*
SPDX-FileCopyrightText: 2020 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#pragma once
#include <kwinglobals.h>
#include <QObject>
#include <QString>
#include <memory>
#include <sys/types.h>
namespace KWin
{
/**
* The Session class represents the session controlled by the compositor.
*
* The Session class provides information about the virtual terminal where the compositor
* is running and a way to open files that require special privileges, e.g. DRM devices or
* input devices.
*/
class KWIN_EXPORT Session : public QObject
{
Q_OBJECT
public:
/**
* This enum type is used to specify the type of the session.
*/
enum class Type {
Noop,
ConsoleKit,
Logind,
};
/**
* This enum type is used to specify optional capabilities of the session.
*/
enum class Capability : uint {
SwitchTerminal = 0x1,
};
Q_DECLARE_FLAGS(Capabilities, Capability)
static std::unique_ptr<Session> create();
static std::unique_ptr<Session> create(Type type);
/**
* Returns @c true if the session is active; otherwise returns @c false.
*/
virtual bool isActive() const = 0;
/**
* Returns the capabilities supported by the session.
*/
virtual Capabilities capabilities() const = 0;
/**
* Returns the seat name for the Session.
*/
virtual QString seat() const = 0;
/**
* Returns the terminal controlled by the Session.
*/
virtual uint terminal() const = 0;
/**
* Opens the file with the specified @a fileName. Returns the file descriptor
* of the file or @a -1 if an error has occurred.
*/
virtual int openRestricted(const QString &fileName) = 0;
/**
* Closes a file that has been opened using the openRestricted() function.
*/
virtual void closeRestricted(int fileDescriptor) = 0;
/**
* Switches to the specified virtual @a terminal. This function does nothing if the
* Capability::SwitchTerminal capability is unsupported.
*/
virtual void switchTo(uint terminal) = 0;
Q_SIGNALS:
/**
* This signal is emitted when the session is resuming from suspend.
*/
void awoke();
/**
* This signal is emitted when the active state of the session has changed.
*/
void activeChanged(bool active);
/**
* This signal is emitted when the specified device can be used again.
*/
void deviceResumed(dev_t deviceId);
/**
* This signal is emitted when the given device cannot be used by the compositor
* anymore. For example, this normally occurs when switching between VTs.
*
* Note that when this signal is emitted for a DRM device, master permissions can
* be already revoked.
*/
void devicePaused(dev_t deviceId);
protected:
explicit Session() = default;
};
} // namespace KWin
Q_DECLARE_OPERATORS_FOR_FLAGS(KWin::Session::Capabilities)