kwin/sm.h
David Edmundson 71ce1f7a5b Add an explicit quit mechanism controlled by plasma
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
2020-11-22 22:04:59 +00:00

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