KConfig 5.109.0
kwindowstatesaver.h
1/*
2 SPDX-FileCopyrightText: 2022 Volker Krause <vkrause@kde.org>
3 SPDX-License-Identifier: LGPL-2.0-or-later
4*/
5
6#ifndef KWINDOWSTATESAVER_H
7#define KWINDOWSTATESAVER_H
8
9#include <kconfiggroup.h>
10#include <kconfiggui_export.h>
11
12#include <QObject>
13
14class QWindow;
15class KWindowStateSaverPrivate;
16
46class KCONFIGGUI_EXPORT KWindowStateSaver : public QObject
47{
48 Q_OBJECT
49public:
54 explicit KWindowStateSaver(QWindow *window, const KConfigGroup &configGroup);
60 explicit KWindowStateSaver(QWindow *window, const QString &configGroupName);
66 explicit KWindowStateSaver(QWindow *window, const char *configGroupName);
67
73 template<typename Widget>
74 explicit inline KWindowStateSaver(Widget *widget, const KConfigGroup &configGroup);
81 template<typename Widget>
82 explicit inline KWindowStateSaver(Widget *widget, const QString &configGroupName);
89 template<typename Widget>
90 explicit inline KWindowStateSaver(Widget *widget, const char *configGroupName);
91
93
94private:
95 void timerEvent(QTimerEvent *event) override;
96 bool eventFilter(QObject *watched, QEvent *event) override;
97
98 // API used by template code, so technically part of the ABI
99 void initWidget(QObject *widget, const std::function<QWindow *()> &windowHandleCallback, const KConfigGroup &configGroup);
100 void initWidget(QObject *widget, const std::function<QWindow *()> &windowHandleCallback, const QString &configGroupName);
101 void initWidget(QObject *widget, const std::function<QWindow *()> &windowHandleCallback, const char *configGroupName);
102
103 // cannot use std::unique_ptr due to the template ctors
104 // not seeing the full private class
105 KWindowStateSaverPrivate *d = nullptr;
106};
107
108template<typename Widget>
109KWindowStateSaver::KWindowStateSaver(Widget *widget, const KConfigGroup &configGroup)
110 : QObject(widget)
111{
112 initWidget(
113 widget,
114 [widget]() {
115 return widget->windowHandle();
116 },
117 configGroup);
118}
119
120template<typename Widget>
121KWindowStateSaver::KWindowStateSaver(Widget *widget, const QString &configGroupName)
122 : QObject(widget)
123{
124 initWidget(
125 widget,
126 [widget]() {
127 return widget->windowHandle();
128 },
129 configGroupName);
130}
131
132template<typename Widget>
133KWindowStateSaver::KWindowStateSaver(Widget *widget, const char *configGroupName)
134 : QObject(widget)
135{
136 initWidget(
137 widget,
138 [widget]() {
139 return widget->windowHandle();
140 },
141 configGroupName);
142}
143
144#endif // KWINDOWSTATESAVER_H
A class for one specific group in a KConfig object.
Definition kconfiggroup.h:39
Saves and restores a window size and (when possible) position.
Definition kwindowstatesaver.h:47
KWindowStateSaver(QWindow *window, const QString &configGroupName)
Create a new window state saver for window.
KWindowStateSaver(QWindow *window, const KConfigGroup &configGroup)
Create a new window state saver for window.
KWindowStateSaver(QWindow *window, const char *configGroupName)
Create a new window state saver for window.