71ce1f7a5b
On X Kwin's lifespan used to be managed by XSMP. This accidentally broke in 5.20 as we made kwin start before ksmserver for speed purposes. This leaves kwin to be killed by the display manager as the X connection closes, but this can lead to deadlocks. BUG:428817 On wayland kwin's lifespan is mapped to the lifespan of the ksmserver binary. This is problematic as it makes our entire xwayland robustness redundant if we ultimately rely on an application that /has/ to run in xwayland. BUG: 427688
94 lines
2 KiB
C++
94 lines
2 KiB
C++
/*
|
|
KWin - the KDE window manager
|
|
This file is part of the KDE project.
|
|
|
|
SPDX-FileCopyrightText: 1999, 2000 Matthias Ettrich <ettrich@kde.org>
|
|
SPDX-FileCopyrightText: 2003 Lubos Lunak <l.lunak@kde.org>
|
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
#ifndef KWIN_SM_H
|
|
#define KWIN_SM_H
|
|
|
|
#include <QDataStream>
|
|
#include <kwinglobals.h>
|
|
#include <QStringList>
|
|
#include <netwm_def.h>
|
|
#include <QRect>
|
|
|
|
namespace KWin
|
|
{
|
|
|
|
class X11Client;
|
|
|
|
class SessionManager : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
SessionManager(QObject *parent);
|
|
~SessionManager() override;
|
|
|
|
SessionState state() const;
|
|
|
|
Q_SIGNALS:
|
|
void stateChanged();
|
|
|
|
void loadSessionRequested(const QString &name);
|
|
void prepareSessionSaveRequested(const QString &name);
|
|
void finishSessionSaveRequested(const QString &name);
|
|
|
|
public Q_SLOTS: // DBus API
|
|
void setState(uint state);
|
|
void loadSession(const QString &name);
|
|
void aboutToSaveSession(const QString &name);
|
|
void finishSaveSession(const QString &name);
|
|
void quit();
|
|
|
|
private:
|
|
void setState(SessionState state);
|
|
SessionState m_sessionState;
|
|
};
|
|
|
|
struct SessionInfo {
|
|
QByteArray sessionId;
|
|
QByteArray windowRole;
|
|
QByteArray wmCommand;
|
|
QByteArray wmClientMachine;
|
|
QByteArray resourceName;
|
|
QByteArray resourceClass;
|
|
|
|
QRect geometry;
|
|
QRect restore;
|
|
QRect fsrestore;
|
|
int maximized;
|
|
int fullscreen;
|
|
int desktop;
|
|
bool minimized;
|
|
bool onAllDesktops;
|
|
bool shaded;
|
|
bool keepAbove;
|
|
bool keepBelow;
|
|
bool skipTaskbar;
|
|
bool skipPager;
|
|
bool skipSwitcher;
|
|
bool noBorder;
|
|
NET::WindowType windowType;
|
|
QString shortcut;
|
|
bool active; // means 'was active in the saved session'
|
|
int stackingOrder;
|
|
float opacity;
|
|
|
|
QStringList activities;
|
|
};
|
|
|
|
|
|
enum SMSavePhase {
|
|
SMSavePhase0, // saving global state in "phase 0"
|
|
SMSavePhase2, // saving window state in phase 2
|
|
SMSavePhase2Full // complete saving in phase2, there was no phase 0
|
|
};
|
|
|
|
} // namespace
|
|
|
|
#endif
|