/****************************************************************************
**
** 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$
**
****************************************************************************/

/*!
    \class QWindowsWindowFunctions
    \inmodule QtPlatformHeaders
    \since 5.5
    \brief The QWindowsWindowFunctions class is an inline class containing
    miscellaneous functionality for Windows window specific functionality.

    A common usage pattern is as follows:
    \snippet qwindowswindowfunctions/main.cpp 0

    \note There is no binary compatibility guarantee for this class,
    meaning that an application using it is only guaranteed to work with the Qt
    version it was developed against.
*/

/*!
    \enum QWindowsWindowFunctions::TouchWindowTouchType

    This enum represents the supported TouchWindow touch flags for RegisterTouchWindow().

    \value NormalTouch
    \value FineTouch
    \value WantPalmTouch
*/

/*!
    \typedef QWindowsWindowFunctions::SetTouchWindowTouchType

    This is the typedef for the function returned by QGuiApplication::platformFunction when passed setTouchWindowTouchTypeIdentifier.
*/

/*!
    \fn QByteArray QWindowsWindowFunctions::setTouchWindowTouchTypeIdentifier()

    This function returns the bytearray that can be used to query
    QGuiApplication::platformFunction to retrieve the SetTouchWindowTouchType function.
*/

/*!
    \fn void QWindowsWindowFunctions::setTouchWindowTouchType(QWindow *window, TouchWindowTouchTypes type)

    This is a convenience function that can be used directly instead of resolving the function pointer.
    \a window and \a type will be relayed to the function retrieved by QGuiApplication
*/

/*!
    \typedef QWindowsWindowFunctions::SetHasBorderInFullScreen

    This is the typedef for the function returned by QGuiApplication::platformFunction when passed setHasBorderInFullScreenIdentifier.
*/

/*!
    \fn QByteArray QWindowsWindowFunctions::setHasBorderInFullScreenIdentifier()
    \since 5.6

    This function returns the bytearray that can be used to query
    QGuiApplication::platformFunction to retrieve the SetHasBorderInFullScreen function.
*/

/*!
    \fn void QWindowsWindowFunctions::setHasBorderInFullScreen(QWindow *window, bool border)
    \since 5.6

    This is a convenience function that can be used directly instead of resolving the function pointer.
    \a window and \a border will be relayed to the function retrieved by QGuiApplication. When \a border
    is true then it will enable the WS_BORDER flag in full screen mode to enable other top level windows
    inside the application to appear on top when required.

    \note The setting must be applied before showing the window or switching it
    to full screen. For QML, setHasBorderInFullScreenDefault() can be used to
    set a default value.

    See also \l [QtDoc] {Fullscreen OpenGL Based Windows}
*/

/*!
    \typedef QWindowsWindowFunctions::SetHasBorderInFullScreenDefault
    \since 5.13

    This is the typedef for the function returned by QGuiApplication::platformFunction
    when passed setHasBorderInFullScreenDefaultIdentifier.
*/

/*!
    \fn QByteArray QWindowsWindowFunctions::setHasBorderInFullScreenDefaultIdentifier()
    \since 5.13

    This function returns the bytearray that can be used to query
    QGuiApplication::platformFunction to retrieve the SetHasBorderInFullScreen function.
*/

/*!
    \fn void QWindowsWindowFunctions::setHasBorderInFullScreenDefault(bool border)
    \since 5.13

    This is a convenience function that can be used directly instead of resolving
    the function pointer. \a border will be relayed to the function retrieved by
    QGuiApplication. When \a border is true, the WS_BORDER flag will be set
    in full screen mode for all windows by default.

    See also \l [QtDoc] {Fullscreen OpenGL Based Windows}
    \sa setHasBorderInFullScreen()
*/

/*!
    \enum QWindowsWindowFunctions::WindowActivationBehavior

    This enum specifies the behavior of QWidget::activateWindow() and
    QWindow::requestActivate().

    \value DefaultActivateWindow The window is activated according to the default
        behavior of the Windows operating system. This means the window will not
        be activated in some circumstances (most notably when the calling process
        is not the active process); only the taskbar entry will be flashed.
    \value AlwaysActivateWindow  The window is always activated, even when the
        calling process is not the active process.

    \sa QWidget::activateWindow(), QWindow::requestActivate()
    \since 5.7
*/

/*!
    \typedef QWindowsWindowFunctions::SetWindowActivationBehaviorType

    This is the typedef for the function returned by QGuiApplication::platformFunction()
    when passed setWindowActivationBehaviorIdentifier().

    \sa QWidget::activateWindow(), QWindow::requestActivate()
    \since 5.7
*/

/*!
    \fn QByteArray QWindowsWindowFunctions::setWindowActivationBehaviorIdentifier()

    This function returns a bytearray that can be used to query
    QGuiApplication::platformFunction() to retrieve the SetWindowActivationBehaviorType
    function.

    \sa QWidget::activateWindow(), QWindow::requestActivate()
    \since 5.7
*/

/*!
    \fn void QWindowsWindowFunctions::setWindowActivationBehavior(WindowActivationBehavior behavior)

    This is a convenience function that can be used directly instead of resolving
    the function pointer. \a behavior will be relayed to the function retrieved
    by QGuiApplication.

    \sa QWidget::activateWindow(), QWindow::requestActivate()
    \since 5.7
*/

/*!
    \typedef QWindowsWindowFunctions::IsTabletModeType

    This is the typedef for the function returned by QGuiApplication::platformFunction()
    when passed isTabletModeIdentifier().

    \since 5.9
*/

/*!
    \fn QByteArray QWindowsWindowFunctions::isTabletModeIdentifier()

    Returns a bytearray that can be used to query
    QGuiApplication::platformFunction() to retrieve the IsTabletModeType
    function.

    \since 5.9
*/

/*!
    \fn bool QWindowsWindowFunctions::isTabletMode()

    This is a convenience function that can be used directly instead of resolving
    the function pointer. Returns true if Windows 10 operates in \e{Tablet Mode}.
    In this mode, Windows forces all application main windows to open in maximized
    state. Applications should then avoid resizing windows or restoring geometries
    to non-maximized states.

    \sa QWidget::showMaximized(), QWidget::saveGeometry(), QWidget::restoreGeometry()
    \since 5.9
*/
