Add QPlatformInterface::Private::QWindowsWindow

Remove QWindowsWindowFunctions

Task-number: QTBUG-83252
Change-Id: Iacfdf2e0f430208901c182e461c4617e1ef526ce
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Friedemann Kleint 2020-07-17 13:10:41 +02:00 committed by Tor Arne Vestbø
parent ac98b6e4ea
commit b61ab2b425
12 changed files with 39 additions and 207 deletions

View File

@ -107,7 +107,17 @@ struct Q_GUI_EXPORT QXcbWindow
virtual void setWindowIconText(const QString &text) = 0;
virtual uint visualId() const = 0;
};
#endif
#endif // xcb
#ifdef Q_OS_WIN
struct Q_GUI_EXPORT QWindowsWindow
{
QT_DECLARE_PLATFORM_INTERFACE(QWindowsWindow)
virtual void setHasBorderInFullScreen(bool border) = 0;
virtual bool hasBorderInFullScreen() const = 0;
};
#endif // Q_OS_WIN
} // QPlatformInterface::Private

View File

@ -41,6 +41,8 @@
#include <QtGui/private/qguiapplication_p.h>
#include <qpa/qplatformopenglcontext.h>
#include <qpa/qplatformintegration.h>
#include <qpa/qplatformwindow.h>
#include <qpa/qplatformwindow_p.h>
QT_BEGIN_NAMESPACE
@ -66,5 +68,6 @@ QOpenGLContext *QPlatformInterface::QWGLContext::fromNative(HGLRC context, HWND
#endif // QT_NO_OPENGL
QT_DEFINE_PRIVATE_PLATFORM_INTERFACE(QWindowsApplication);
QT_DEFINE_PRIVATE_PLATFORM_INTERFACE(QWindowsWindow);
QT_END_NAMESPACE

View File

@ -10,7 +10,6 @@ qt_add_module(PlatformHeaders
eglfsfunctions/qeglfsfunctions_p.h
helper/qplatformheaderhelper_p.h
waylandfunctions/qwaylandwindowfunctions_p.h
windowsfunctions/qwindowswindowfunctions_p.h
PUBLIC_LIBRARIES
Qt::Core
Qt::Gui

View File

@ -11,7 +11,6 @@ qt_add_module(PlatformHeaders
# eglfsfunctions/qeglfsfunctions_p.h
# helper/qplatformheaderhelper_p.h
# waylandfunctions/qwaylandwindowfunctions_p.h
# windowsfunctions/qwindowswindowfunctions_p.h
# special case end
PUBLIC_LIBRARIES
Qt::Core

View File

@ -2,7 +2,6 @@ TARGET = QtPlatformHeaders
CONFIG += header_module
include(eglfsfunctions/eglfsfunctions.pri)
include(windowsfunctions/windowsfunctions.pri)
include(helper/helper.pri)
include(waylandfunctions/waylandfunctions.pri)

View File

@ -1,101 +0,0 @@
/****************************************************************************
**
** 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
\inheaderfile QtPlatformHeaders/QWindowsWindowFunctions
\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.
*/
/*!
\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()
*/

View File

@ -1,85 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** 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 Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or (at your option) the GNU General
** Public license version 3 or any later version approved by the KDE Free
** Qt Foundation. The licenses are as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
** https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QWINDOWSWINDOWFUNCTIONS_H
#define QWINDOWSWINDOWFUNCTIONS_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include <QtCore/QByteArray>
#include <QtGui/QGuiApplication>
QT_BEGIN_NAMESPACE
class QWindow;
class QWindowsWindowFunctions {
public:
typedef void (*SetHasBorderInFullScreen)(QWindow *window, bool border);
static const QByteArray setHasBorderInFullScreenIdentifier() { return QByteArrayLiteral("WindowsSetHasBorderInFullScreen"); }
static void setHasBorderInFullScreen(QWindow *window, bool border)
{
SetHasBorderInFullScreen func = reinterpret_cast<SetHasBorderInFullScreen>(QGuiApplication::platformFunction(setHasBorderInFullScreenIdentifier()));
if (func)
func(window, border);
}
typedef void (*SetHasBorderInFullScreenDefault)(bool border);
static const QByteArray setHasBorderInFullScreenDefaultIdentifier() { return QByteArrayLiteral("WindowsSetHasBorderInFullScreenDefault"); }
static void setHasBorderInFullScreenDefault(bool border)
{
auto func = reinterpret_cast<SetHasBorderInFullScreenDefault>(QGuiApplication::platformFunction(setHasBorderInFullScreenDefaultIdentifier()));
if (func)
func(border);
}
};
QT_END_NAMESPACE
#endif // QWINDOWSWINDOWFUNCTIONS_H

View File

@ -1 +0,0 @@
HEADERS += $$PWD/qwindowswindowfunctions_p.h

View File

@ -256,15 +256,6 @@ QFont QWindowsNativeInterface::logFontToQFont(const void *logFont, int verticalD
return QWindowsFontDatabase::LOGFONT_to_QFont(*reinterpret_cast<const LOGFONT *>(logFont), verticalDpi);
}
QFunctionPointer QWindowsNativeInterface::platformFunction(const QByteArray &function) const
{
if (function == QWindowsWindowFunctions::setHasBorderInFullScreenIdentifier())
return QFunctionPointer(QWindowsWindow::setHasBorderInFullScreenStatic);
if (function == QWindowsWindowFunctions::setHasBorderInFullScreenDefaultIdentifier())
return QFunctionPointer(QWindowsWindow::setHasBorderInFullScreenDefault);
return nullptr;
}
QVariant QWindowsNativeInterface::gpu() const
{
return GpuDescription::detect().toVariant();

View File

@ -42,7 +42,6 @@
#include <QtGui/qfont.h>
#include <QtGui/qpa/qplatformnativeinterface.h>
#include <QtPlatformHeaders/private/qwindowswindowfunctions_p.h>
QT_BEGIN_NAMESPACE
@ -104,8 +103,6 @@ public:
QVariant windowProperty(QPlatformWindow *window, const QString &name, const QVariant &defaultValue) const override;
void setWindowProperty(QPlatformWindow *window, const QString &name, const QVariant &value) override;
QFunctionPointer platformFunction(const QByteArray &function) const override;
Q_SIGNALS:
void darkModeChanged(bool);
};

View File

@ -1182,6 +1182,17 @@ QPoint QWindowsBaseWindow::mapFromGlobal(const QPoint &pos) const
return QWindowsGeometryHint::mapFromGlobal(handle(), pos);
}
void QWindowsBaseWindow::setHasBorderInFullScreen(bool)
{
Q_UNIMPLEMENTED();
}
bool QWindowsBaseWindow::hasBorderInFullScreen() const
{
Q_UNIMPLEMENTED();
return false;
}
/*!
\class QWindowsDesktopWindow
\brief Window wrapping GetDesktopWindow not allowing any manipulation.
@ -3113,9 +3124,14 @@ void QWindowsWindow::setHasBorderInFullScreenDefault(bool border)
m_borderInFullScreenDefault = border;
}
bool QWindowsWindow::hasBorderInFullScreen() const
{
return testFlag(HasBorderInFullScreen);
}
void QWindowsWindow::setHasBorderInFullScreen(bool border)
{
if (testFlag(HasBorderInFullScreen) == border)
if (hasBorderInFullScreen() == border)
return;
if (border)
setFlag(HasBorderInFullScreen);

View File

@ -46,7 +46,7 @@
#include "qwindowscursor.h"
#include <qpa/qplatformwindow.h>
#include <QtPlatformHeaders/private/qwindowswindowfunctions_p.h>
#include <qpa/qplatformwindow_p.h>
#if QT_CONFIG(vulkan)
#include "qwindowsvulkaninstance.h"
@ -124,7 +124,8 @@ struct QWindowsWindowData
const QString &title);
};
class QWindowsBaseWindow : public QPlatformWindow
class QWindowsBaseWindow : public QPlatformWindow,
public QPlatformInterface::Private::QWindowsWindow
{
Q_DISABLE_COPY_MOVE(QWindowsBaseWindow)
public:
@ -140,6 +141,9 @@ public:
QPoint mapFromGlobal(const QPoint &pos) const override;
virtual QMargins fullFrameMargins() const { return frameMargins_sys(); }
void setHasBorderInFullScreen(bool border) override;
bool hasBorderInFullScreen() const override;
using QPlatformWindow::screenForGeometry;
virtual HWND handle() const = 0;
@ -358,7 +362,8 @@ public:
void registerTouchWindow();
static void setHasBorderInFullScreenStatic(QWindow *window, bool border);
static void setHasBorderInFullScreenDefault(bool border);
void setHasBorderInFullScreen(bool border);
void setHasBorderInFullScreen(bool border) override;
bool hasBorderInFullScreen() const override;
static QString formatWindowTitle(const QString &title);
static const char *embeddedNativeParentHandleProperty;