File indexing completed on 2024-04-14 14:30:01

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2000 Reginald Stadlbauer <reggie@kde.org>
0004     SPDX-FileCopyrightText: 1997 Stephan Kulow <coolo@kde.org>
0005     SPDX-FileCopyrightText: 1997-2000 Sven Radej <radej@kde.org>
0006     SPDX-FileCopyrightText: 1997-2000 Matthias Ettrich <ettrich@kde.org>
0007     SPDX-FileCopyrightText: 1999 Chris Schlaeger <cs@kde.org>
0008     SPDX-FileCopyrightText: 2002 Joseph Wenninger <jowenn@kde.org>
0009     SPDX-FileCopyrightText: 2005-2006 Hamish Rodda <rodda@kde.org>
0010 
0011     SPDX-License-Identifier: LGPL-2.0-only
0012 */
0013 
0014 #ifndef KMAINWINDOW_P_H
0015 #define KMAINWINDOW_P_H
0016 
0017 #include <KConfigGroup>
0018 #include <QEventLoopLocker>
0019 #include <QPointer>
0020 
0021 class QObject;
0022 class QSessionManager;
0023 class QTimer;
0024 class KHelpMenu;
0025 class KMainWindow;
0026 
0027 class KMainWindowPrivate
0028 {
0029 public:
0030     virtual ~KMainWindowPrivate() = default;
0031 
0032     bool autoSaveSettings : 1;
0033     bool settingsDirty : 1;
0034     bool autoSaveWindowSize : 1;
0035     bool sizeApplied : 1;
0036     bool suppressCloseEvent : 1;
0037 
0038     KConfigGroup autoSaveGroup;
0039     // If API consumers opt-in to save the state config separately, we want to save the window sizes in the given config
0040     KConfigGroup &autoSaveStateGroup()
0041     {
0042         return m_stateConfigGroup.isValid() ? m_stateConfigGroup : autoSaveGroup;
0043     }
0044     KConfigGroup m_stateConfigGroup;
0045     inline KConfigGroup getValidStateConfig(KConfigGroup &cg) const
0046     {
0047         return m_stateConfigGroup.isValid() ? m_stateConfigGroup : cg;
0048     }
0049     inline void migrateStateDataIfNeeded(KConfigGroup &cg)
0050     {
0051         if (m_stateConfigGroup.isValid()) {
0052             // The window sizes are written in KWindowSystem and RestorePositionForNextInstance is only temporarely written until
0053             // all instances of the app are closed
0054             cg.moveValuesTo({"State"}, m_stateConfigGroup);
0055         }
0056     }
0057 
0058     QTimer *settingsTimer;
0059     QTimer *sizeTimer;
0060     QRect defaultWindowSize;
0061     KHelpMenu *helpMenu;
0062     KMainWindow *q;
0063     QPointer<QObject> dockResizeListener;
0064     QString dbusName;
0065     bool letDirtySettings;
0066     QEventLoopLocker locker;
0067 
0068     // This slot will be called when the style KCM changes settings that need
0069     // to be set on the already running applications.
0070     void _k_slotSettingsChanged(int category);
0071     void _k_slotSaveAutoSaveSize();
0072     void _k_slotSaveAutoSavePosition();
0073 
0074     void init(KMainWindow *_q);
0075     void polish(KMainWindow *q);
0076     enum CallCompression {
0077         NoCompressCalls = 0,
0078         CompressCalls,
0079     };
0080     void setSettingsDirty(CallCompression callCompression = NoCompressCalls);
0081     void setSizeDirty();
0082 };
0083 
0084 class KMWSessionManager : public QObject
0085 {
0086     Q_OBJECT
0087 public:
0088     KMWSessionManager();
0089     ~KMWSessionManager() override;
0090 
0091 private:
0092     void saveState(QSessionManager &);
0093     void commitData(QSessionManager &);
0094 };
0095 
0096 #endif