1/*
2 This file is part of the KDE libraries
3 SPDX-FileCopyrightText: 2000 Reginald Stadlbauer <reggie@kde.org>
4 SPDX-FileCopyrightText: 1997 Stephan Kulow <coolo@kde.org>
5 SPDX-FileCopyrightText: 1997-2000 Sven Radej <radej@kde.org>
6 SPDX-FileCopyrightText: 1997-2000 Matthias Ettrich <ettrich@kde.org>
7 SPDX-FileCopyrightText: 1999 Chris Schlaeger <cs@kde.org>
8 SPDX-FileCopyrightText: 2002 Joseph Wenninger <jowenn@kde.org>
9 SPDX-FileCopyrightText: 2005-2006 Hamish Rodda <rodda@kde.org>
10
11 SPDX-License-Identifier: LGPL-2.0-only
12*/
13
14#ifndef KMAINWINDOW_P_H
15#define KMAINWINDOW_P_H
16
17#include <KConfigGroup>
18#include <KSharedConfig>
19#include <QEventLoopLocker>
20#include <QPointer>
21
22class QObject;
23class QSessionManager;
24class QTimer;
25class KHelpMenu;
26class KMainWindow;
27
28class KMainWindowPrivate
29{
30public:
31 virtual ~KMainWindowPrivate() = default;
32
33 bool autoSaveSettings : 1;
34 bool settingsDirty : 1;
35 bool autoSaveWindowSize : 1;
36 bool sizeApplied : 1;
37 bool suppressCloseEvent : 1;
38
39 KConfigGroup autoSaveGroup;
40 mutable KConfigGroup m_stateConfigGroup;
41 inline KConfigGroup &getStateConfig() const
42 {
43 if (!m_stateConfigGroup.isValid()) {
44 // Always use a separate state config here, consumers may override this with a custom/window-specific group
45 m_stateConfigGroup = KSharedConfig::openStateConfig()->group(QStringLiteral("MainWindow"));
46 }
47 return m_stateConfigGroup;
48 }
49 inline void migrateStateDataIfNeeded(KConfigGroup &cg)
50 {
51 if (m_stateConfigGroup.isValid()) {
52 // The window sizes are written in KWindowSystem and RestorePositionForNextInstance is only temporarily written until
53 // all instances of the app are closed
54 cg.moveValuesTo(keys: {"State"}, other&: m_stateConfigGroup);
55 }
56 }
57
58 QTimer *settingsTimer;
59 QTimer *sizeTimer;
60 QRect defaultWindowSize;
61 KHelpMenu *helpMenu;
62 KMainWindow *q;
63 QPointer<QObject> dockResizeListener;
64 QString dbusName;
65 bool letDirtySettings;
66 QEventLoopLocker locker;
67
68 // This slot will be called when the style KCM changes settings that need
69 // to be set on the already running applications.
70 void _k_slotSettingsChanged(int category);
71 void _k_slotSaveAutoSaveSize();
72 void _k_slotSaveAutoSavePosition();
73
74 void init(KMainWindow *_q);
75 void polish(KMainWindow *q);
76 enum CallCompression {
77 NoCompressCalls = 0,
78 CompressCalls,
79 };
80 void setSettingsDirty(CallCompression callCompression = NoCompressCalls);
81 void setSizeDirty();
82};
83
84class KMWSessionManager : public QObject
85{
86 Q_OBJECT
87public:
88 KMWSessionManager();
89 ~KMWSessionManager() override;
90
91private:
92 void saveState(QSessionManager &);
93 void commitData(QSessionManager &);
94};
95
96#endif
97

source code of kxmlgui/src/kmainwindow_p.h