QGIS API Documentation
4.3.0-Master (16eddb2670e)
Toggle main menu visibility
Loading...
Searching...
No Matches
src
gui
qgswidgetstatehelper_p.cpp
Go to the documentation of this file.
1
/***************************************************************************
2
qgswidgetstatehelper_p.cpp - QgsWidgetStateHelper
3
4
---------------------
5
begin : 3.12.2017
6
copyright : (C) 2017 by Nathan Woodrow
7
Email : woodrow.nathan at gmail dot com
8
***************************************************************************
9
* *
10
* This program is free software; you can redistribute it and/or modify *
11
* it under the terms of the GNU General Public License as published by *
12
* the Free Software Foundation; either version 2 of the License, or *
13
* (at your option) any later version. *
14
* *
15
***************************************************************************/
16
#include "
qgswidgetstatehelper_p.h
"
17
18
#include "
qgsguiutils.h
"
19
#include "
qgslogger.h
"
20
21
#include <QEvent>
22
#include <QObject>
23
#include <QVariant>
24
#include <QWidget>
25
#include <QWindow>
26
27
#include "moc_qgswidgetstatehelper_p.cpp"
28
29
QgsWidgetStateHelper::QgsWidgetStateHelper
( QObject *parent )
30
: QObject( parent )
31
{}
32
33
bool
QgsWidgetStateHelper::eventFilter
( QObject *
object
, QEvent *event )
34
{
35
if
( event->type() == QEvent::Close || event->type() == QEvent::Destroy || event->type() == QEvent::Hide )
36
{
37
QWidget *widget = qobject_cast<QWidget *>(
object
);
38
39
// don't save geometry for windows which were never shown
40
if
( widget->property(
"widgetStateHelperWasShown"
).toBool() )
41
{
42
const
QString name = widgetSafeName( widget );
43
const
QString key = mKeys[name];
44
QgsGuiUtils::saveGeometry
( widget, key );
45
widget->setProperty(
"widgetStateHelperWasShown"
, QVariant(
false
) );
46
}
47
}
48
else
if
( event->type() == QEvent::Show )
49
{
50
QWidget *widget = qobject_cast<QWidget *>(
object
);
51
52
// Skip geometry restore if the widget has already been shown once.
53
if
( widget->property(
"widgetStateHelperWasShown"
).toBool() )
54
return
QObject::eventFilter(
object
, event );
55
56
const
QString name = widgetSafeName( widget );
57
58
// If window is already maximized by Window Manager,
59
// there is no need to restore its geometry as it might lead to
60
// an incorrect state of QFlags<Qt::WindowState>(WindowMinimized|WindowMaximized)
61
// thus minimizing window after it just has been restored by WM.
62
// Inability to restore minimized windows has been observed with
63
// KWin 5.19 and Qt 5.15 running under X11.
64
QWindow *win = widget->windowHandle();
65
if
( !win )
66
return
QObject::eventFilter(
object
, event );
67
68
if
( !( win->windowStates() & Qt::WindowMaximized ) )
69
{
70
const
QString key = mKeys[name];
71
QgsGuiUtils::restoreGeometry
( widget, key );
72
}
73
74
widget->setProperty(
"widgetStateHelperWasShown"
, QVariant(
true
) );
75
}
76
return
QObject::eventFilter(
object
, event );
77
}
78
79
void
QgsWidgetStateHelper::registerWidget
( QWidget *widget,
const
QString &key )
80
{
81
const
QString name = widgetSafeName( widget );
82
mKeys[name] = key;
83
widget->installEventFilter(
this
);
84
}
85
86
QString QgsWidgetStateHelper::widgetSafeName( QWidget *widget )
87
{
88
if
( widget->objectName().isEmpty() )
89
{
90
return
widget->metaObject()->className();
91
}
92
return
widget->objectName();
93
}
QgsWidgetStateHelper::eventFilter
bool eventFilter(QObject *object, QEvent *event) override
Event filter to catch events from registered widgets.
Definition
qgswidgetstatehelper_p.cpp:33
QgsWidgetStateHelper::registerWidget
void registerWidget(QWidget *widget, const QString &key=QString())
Register a widget to have it geometry state automatically saved and restored.
Definition
qgswidgetstatehelper_p.cpp:79
QgsWidgetStateHelper::QgsWidgetStateHelper
QgsWidgetStateHelper(QObject *parent=nullptr)
QgsWidgetStateHelper.
Definition
qgswidgetstatehelper_p.cpp:29
QgsGuiUtils::restoreGeometry
bool restoreGeometry(QWidget *widget, const QString &keyName)
Restore the wigget geometry from settings.
Definition
qgsguiutils.cpp:242
QgsGuiUtils::saveGeometry
void saveGeometry(QWidget *widget, const QString &keyName)
Save the wigget geometry into settings.
Definition
qgsguiutils.cpp:235
qgsguiutils.h
qgslogger.h
qgswidgetstatehelper_p.h
Generated on
for QGIS API Documentation by
1.17.0