File indexing completed on 2024-11-10 13:22:49

0001 /*
0002     KWin - the KDE window manager
0003     This file is part of the KDE project.
0004 
0005     SPDX-FileCopyrightText: 1999, 2000 Matthias Ettrich <ettrich@kde.org>
0006     SPDX-FileCopyrightText: 2003 Lubos Lunak <l.lunak@kde.org>
0007 
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #pragma once
0012 
0013 #include <QDataStream>
0014 #include <QRect>
0015 #include <QStringList>
0016 
0017 #include <KConfigGroup>
0018 
0019 #include <kwinglobals.h>
0020 #include <netwm_def.h>
0021 
0022 namespace KWin
0023 {
0024 
0025 class X11Window;
0026 struct SessionInfo;
0027 
0028 class SessionManager : public QObject
0029 {
0030     Q_OBJECT
0031 public:
0032     enum SMSavePhase {
0033         SMSavePhase0, // saving global state in "phase 0"
0034         SMSavePhase2, // saving window state in phase 2
0035         SMSavePhase2Full, // complete saving in phase2, there was no phase 0
0036     };
0037 
0038     SessionManager(QObject *parent);
0039     ~SessionManager() override;
0040 
0041     SessionState state() const;
0042 
0043     void loadSubSessionInfo(const QString &name);
0044     void storeSubSession(const QString &name, QSet<QByteArray> sessionIds);
0045 
0046     SessionInfo *takeSessionInfo(X11Window *);
0047 
0048 Q_SIGNALS:
0049     void stateChanged();
0050 
0051     void loadSessionRequested(const QString &name);
0052     void prepareSessionSaveRequested(const QString &name);
0053     void finishSessionSaveRequested(const QString &name);
0054 
0055 public Q_SLOTS: // DBus API
0056     void setState(uint state);
0057     void loadSession(const QString &name);
0058     void aboutToSaveSession(const QString &name);
0059     void finishSaveSession(const QString &name);
0060     void quit();
0061 
0062 private:
0063     void setState(SessionState state);
0064 
0065     void storeSession(const QString &sessionName, SMSavePhase phase);
0066     void storeClient(KConfigGroup &cg, int num, X11Window *c);
0067     void loadSessionInfo(const QString &sessionName);
0068     void addSessionInfo(KConfigGroup &cg);
0069 
0070     SessionState m_sessionState = SessionState::Normal;
0071 
0072     int m_sessionActiveClient;
0073     int m_sessionDesktop;
0074 
0075     QList<SessionInfo *> session;
0076 };
0077 
0078 struct SessionInfo
0079 {
0080     QByteArray sessionId;
0081     QString windowRole;
0082     QString wmCommand;
0083     QString wmClientMachine;
0084     QString resourceName;
0085     QString resourceClass;
0086 
0087     QRect geometry;
0088     QRect restore;
0089     QRect fsrestore;
0090     int maximized;
0091     int fullscreen;
0092     int desktop;
0093     bool minimized;
0094     bool onAllDesktops;
0095     bool shaded;
0096     bool keepAbove;
0097     bool keepBelow;
0098     bool skipTaskbar;
0099     bool skipPager;
0100     bool skipSwitcher;
0101     bool noBorder;
0102     NET::WindowType windowType;
0103     QString shortcut;
0104     bool active; // means 'was active in the saved session'
0105     int stackingOrder;
0106     float opacity;
0107 
0108     QStringList activities;
0109 };
0110 
0111 } // namespace