diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-07-17 13:10:41 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-07-22 17:46:09 +0000 |
commit | b61ab2b425627be68ee04e11016fafd07f0617c3 (patch) | |
tree | e5adb84533d056bf255dd9365bac4d830357861f | |
parent | ac98b6e4ea46835d01b4c8f35b566a92136c90fe (diff) |
Add QPlatformInterface::Private::QWindowsWindow
Remove QWindowsWindowFunctions
Task-number: QTBUG-83252
Change-Id: Iacfdf2e0f430208901c182e461c4617e1ef526ce
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
-rw-r--r-- | src/gui/kernel/qplatformwindow_p.h | 12 | ||||
-rw-r--r-- | src/gui/platform/windows/qwindowsplatforminterface.cpp | 3 | ||||
-rw-r--r-- | src/platformheaders/.prev_CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/platformheaders/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/platformheaders/platformheaders.pro | 1 | ||||
-rw-r--r-- | src/platformheaders/windowsfunctions/qwindowswindowfunctions.qdoc | 101 | ||||
-rw-r--r-- | src/platformheaders/windowsfunctions/qwindowswindowfunctions_p.h | 85 | ||||
-rw-r--r-- | src/platformheaders/windowsfunctions/windowsfunctions.pri | 1 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowsnativeinterface.cpp | 9 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowsnativeinterface.h | 3 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowswindow.cpp | 18 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowswindow.h | 11 |
12 files changed, 39 insertions, 207 deletions
diff --git a/src/gui/kernel/qplatformwindow_p.h b/src/gui/kernel/qplatformwindow_p.h index e7682cc204..fdcb62b364 100644 --- a/src/gui/kernel/qplatformwindow_p.h +++ b/src/gui/kernel/qplatformwindow_p.h @@ -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 diff --git a/src/gui/platform/windows/qwindowsplatforminterface.cpp b/src/gui/platform/windows/qwindowsplatforminterface.cpp index 44f9c246cb..a8ee0b55d6 100644 --- a/src/gui/platform/windows/qwindowsplatforminterface.cpp +++ b/src/gui/platform/windows/qwindowsplatforminterface.cpp @@ -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 diff --git a/src/platformheaders/.prev_CMakeLists.txt b/src/platformheaders/.prev_CMakeLists.txt index c7cfe0ca69..f82aa8a647 100644 --- a/src/platformheaders/.prev_CMakeLists.txt +++ b/src/platformheaders/.prev_CMakeLists.txt @@ -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 diff --git a/src/platformheaders/CMakeLists.txt b/src/platformheaders/CMakeLists.txt index eaa0db8f10..d4ea3251e9 100644 --- a/src/platformheaders/CMakeLists.txt +++ b/src/platformheaders/CMakeLists.txt @@ -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 diff --git a/src/platformheaders/platformheaders.pro b/src/platformheaders/platformheaders.pro index e7edbc60b1..63d162e2b2 100644 --- a/src/platformheaders/platformheaders.pro +++ b/src/platformheaders/platformheaders.pro @@ -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) diff --git a/src/platformheaders/windowsfunctions/qwindowswindowfunctions.qdoc b/src/platformheaders/windowsfunctions/qwindowswindowfunctions.qdoc deleted file mode 100644 index f211165936..0000000000 --- a/src/platformheaders/windowsfunctions/qwindowswindowfunctions.qdoc +++ /dev/null @@ -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() -*/ diff --git a/src/platformheaders/windowsfunctions/qwindowswindowfunctions_p.h b/src/platformheaders/windowsfunctions/qwindowswindowfunctions_p.h deleted file mode 100644 index 780be22a05..0000000000 --- a/src/platformheaders/windowsfunctions/qwindowswindowfunctions_p.h +++ /dev/null @@ -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 diff --git a/src/platformheaders/windowsfunctions/windowsfunctions.pri b/src/platformheaders/windowsfunctions/windowsfunctions.pri deleted file mode 100644 index ee11b9c2b0..0000000000 --- a/src/platformheaders/windowsfunctions/windowsfunctions.pri +++ /dev/null @@ -1 +0,0 @@ -HEADERS += $$PWD/qwindowswindowfunctions_p.h diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp index 8483da7aff..a62ce1323f 100644 --- a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp +++ b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp @@ -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(); diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.h b/src/plugins/platforms/windows/qwindowsnativeinterface.h index cfb14ae794..95b6bf847c 100644 --- a/src/plugins/platforms/windows/qwindowsnativeinterface.h +++ b/src/plugins/platforms/windows/qwindowsnativeinterface.h @@ -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); }; diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index cd234e22b7..9668f58112 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -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); diff --git a/src/plugins/platforms/windows/qwindowswindow.h b/src/plugins/platforms/windows/qwindowswindow.h index 27c225f626..6c6c86ef47 100644 --- a/src/plugins/platforms/windows/qwindowswindow.h +++ b/src/plugins/platforms/windows/qwindowswindow.h @@ -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; |