summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-07-17 13:10:41 +0200
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2020-07-22 17:46:09 +0000
commitb61ab2b425627be68ee04e11016fafd07f0617c3 (patch)
treee5adb84533d056bf255dd9365bac4d830357861f
parentac98b6e4ea46835d01b4c8f35b566a92136c90fe (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.h12
-rw-r--r--src/gui/platform/windows/qwindowsplatforminterface.cpp3
-rw-r--r--src/platformheaders/.prev_CMakeLists.txt1
-rw-r--r--src/platformheaders/CMakeLists.txt1
-rw-r--r--src/platformheaders/platformheaders.pro1
-rw-r--r--src/platformheaders/windowsfunctions/qwindowswindowfunctions.qdoc101
-rw-r--r--src/platformheaders/windowsfunctions/qwindowswindowfunctions_p.h85
-rw-r--r--src/platformheaders/windowsfunctions/windowsfunctions.pri1
-rw-r--r--src/plugins/platforms/windows/qwindowsnativeinterface.cpp9
-rw-r--r--src/plugins/platforms/windows/qwindowsnativeinterface.h3
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.cpp18
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.h11
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;