ec610fd7ed
Summary: Currently kwin opens a second ICE connection to ksmserver in order to tell the state of kwin's whether we're logging out and saving clients or not. This requires that kwin launches after ksmserver to have the connection which is a dependency I want to break. Practically this code is already ksmserver specific as it relies on some custom code that sends the first saveState request to kwin first. Instead we can replace it with a bespoke IPC over DBus and siplify the code both end. This will allow several other future enhancements that we want with regards to handling the session state, as well as make an effort platform agnostic session management, as well as cleaning up some complex code. Ksmserver calls into kwin, rather than having kwin watch ksmserver state to allow us make sure it's race free. Reviewers: #kwin, zzag Reviewed By: #kwin, zzag Subscribers: romangg, zzag, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D24862
97 lines
2.3 KiB
C++
97 lines
2.3 KiB
C++
/********************************************************************
|
|
KWin - the KDE window manager
|
|
This file is part of the KDE project.
|
|
|
|
Copyright (C) 1999, 2000 Matthias Ettrich <ettrich@kde.org>
|
|
Copyright (C) 2003 Lubos Lunak <l.lunak@kde.org>
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*********************************************************************/
|
|
|
|
#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();
|
|
|
|
public Q_SLOTS: // DBus API
|
|
void setState(uint state);
|
|
|
|
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
|