/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \page restoring-geometry.html
    \title Restoring a Window's Geometry
    \brief How to save &amp; restore window geometry.
    \ingroup best-practices

    This document describes how to save and restore a \l{Window
    Geometry}{window's geometry} using the geometry properties. On
    Windows, this is basically storing the result of
    QWindow::geometry() and calling QWindow::setGeometry() in the next
    session before calling \l{QWindow::show()}{show()}.

    On X11, this might not work because an invisible window does not
    have a frame yet. The window manager will decorate the window
    later.  When this happens, the window shifts towards the
    bottom/right corner of the screen depending on the size of the
    decoration frame.  Although X provides a way to avoid this shift,
    some window managers fail to implement this feature.

    When using \l{Qt Widgets}, Qt provides functions that saves and restores a
    widget window's geometry and state for you. QWidget::saveGeometry()
    saves the window geometry and maximized/fullscreen state, while
    QWidget::restoreGeometry() restores it. The restore function also
    checks if the restored geometry is outside the available screen
    geometry, and modifies it as appropriate if it is:

    \snippet snippets/code/src_gui_widgets_qmainwindow.cpp 0
    \snippet snippets/code/src_gui_widgets_qmainwindow.cpp 1

    Another solution is to store both \l{QWidget::pos()}{pos()} and
    \l{QWidget::size()}{size()} and to restore the geometry using
    \l{QWidget::resize()} and \l{QWidget::move()}{move()} before
    calling \l{QWidget::show()}{show()}, as demonstrated in the
    \l{mainwindows/application}{Application} example.
*/
