summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2020-05-13 17:53:39 +0200
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2020-07-06 15:48:23 +0200
commitf02dde3d74ec69d2bafa25053ff85e514d950b0e (patch)
tree51f3ab15414e3d7642f3d2ecd59b2deb92298eb9 /src
parent04739ce4b401bdfe766e64deac1bb382ddd954cc (diff)
Simplify QMainWindow::setUnifiedTitleAndToolBarOnMac
Task-number: QTBUG-83252 Change-Id: Ib6f7dcfe21407603d4cfd5d33f6615d8623db940 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/gui/kernel/qplatformwindow.h14
-rw-r--r--src/gui/platform/macos/qcocoaplatforminterface.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoanativeinterface.h3
-rw-r--r--src/plugins/platforms/cocoa/qcocoanativeinterface.mm12
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.h5
-rw-r--r--src/widgets/widgets/qmainwindow.cpp35
6 files changed, 33 insertions, 38 deletions
diff --git a/src/gui/kernel/qplatformwindow.h b/src/gui/kernel/qplatformwindow.h
index 76624835a7..5ec2ecb2e0 100644
--- a/src/gui/kernel/qplatformwindow.h
+++ b/src/gui/kernel/qplatformwindow.h
@@ -170,6 +170,20 @@ protected:
QScopedPointer<QPlatformWindowPrivate> d_ptr;
};
+// ----------------- QPlatformInterface -----------------
+
+namespace QPlatformInterface::Private {
+
+#if defined(Q_OS_MACOS)
+struct Q_GUI_EXPORT QCocoaWindow
+{
+ QT_DECLARE_PLATFORM_INTERFACE(QCocoaWindow)
+ virtual void setContentBorderEnabled(bool enable) = 0;
+};
+#endif
+
+} // QPlatformInterface::Private
+
QT_END_NAMESPACE
#endif //QPLATFORMWINDOW_H
diff --git a/src/gui/platform/macos/qcocoaplatforminterface.mm b/src/gui/platform/macos/qcocoaplatforminterface.mm
index 2fc9228ab1..a14335e077 100644
--- a/src/gui/platform/macos/qcocoaplatforminterface.mm
+++ b/src/gui/platform/macos/qcocoaplatforminterface.mm
@@ -41,6 +41,7 @@
#include <QtGui/private/qguiapplication_p.h>
#include <qpa/qplatformopenglcontext.h>
#include <qpa/qplatformintegration.h>
+#include <qpa/qplatformwindow.h>
#include <AppKit/AppKit.h>
@@ -52,6 +53,7 @@ using namespace QPlatformInterface::Private;
QT_DEFINE_PLATFORM_INTERFACE(QCocoaGLContext, QOpenGLContext);
QT_DEFINE_PRIVATE_PLATFORM_INTERFACE(QCocoaGLIntegration);
+QT_DEFINE_PRIVATE_PLATFORM_INTERFACE(QCocoaWindow);
QOpenGLContext *QPlatformInterface::QCocoaGLContext::fromNative(NSOpenGLContext *nativeContext, QOpenGLContext *shareContext)
{
diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.h b/src/plugins/platforms/cocoa/qcocoanativeinterface.h
index 7d4c5884b3..4f82faf39b 100644
--- a/src/plugins/platforms/cocoa/qcocoanativeinterface.h
+++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.h
@@ -105,9 +105,6 @@ private:
// deregisters.
static void registerTouchWindow(QWindow *window, bool enable);
- // Enable the unified title and toolbar area for a window.
- static void setContentBorderEnabled(QWindow *window, bool enable);
-
// Set the size of the unified title and toolbar area.
static void setContentBorderThickness(QWindow *window, int topThickness, int bottomThickness);
diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
index 426e413a86..77187f2d20 100644
--- a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
+++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
@@ -118,8 +118,6 @@ QPlatformNativeInterface::NativeResourceForIntegrationFunction QCocoaNativeInter
return NativeResourceForIntegrationFunction(QCocoaNativeInterface::registerContentBorderArea);
if (resource.toLower() == "setcontentborderareaenabled")
return NativeResourceForIntegrationFunction(QCocoaNativeInterface::setContentBorderAreaEnabled);
- if (resource.toLower() == "setcontentborderenabled")
- return NativeResourceForIntegrationFunction(QCocoaNativeInterface::setContentBorderEnabled);
if (resource.toLower() == "setnstoolbar")
return NativeResourceForIntegrationFunction(QCocoaNativeInterface::setNSToolbar);
if (resource.toLower() == "testcontentborderposition")
@@ -260,16 +258,6 @@ void QCocoaNativeInterface::setContentBorderAreaEnabled(QWindow *window, quintpt
cocoaWindow->setContentBorderAreaEnabled(identifier, enable);
}
-void QCocoaNativeInterface::setContentBorderEnabled(QWindow *window, bool enable)
-{
- if (!window)
- return;
-
- QCocoaWindow *cocoaWindow = static_cast<QCocoaWindow *>(window->handle());
- if (cocoaWindow)
- cocoaWindow->setContentBorderEnabled(enable);
-}
-
void QCocoaNativeInterface::setNSToolbar(QWindow *window, void *nsToolbar)
{
QCocoaIntegration::instance()->setToolbar(window, static_cast<NSToolbar *>(nsToolbar));
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h
index e4debd669d..0c607320f8 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.h
+++ b/src/plugins/platforms/cocoa/qcocoawindow.h
@@ -98,7 +98,8 @@ class QDebug;
class QCocoaMenuBar;
-class QCocoaWindow : public QObject, public QPlatformWindow
+class QCocoaWindow : public QObject, public QPlatformWindow,
+ public QPlatformInterface::Private::QCocoaWindow
{
Q_OBJECT
public:
@@ -192,7 +193,7 @@ public:
void setContentBorderThickness(int topThickness, int bottomThickness);
void registerContentBorderArea(quintptr identifier, int upper, int lower);
void setContentBorderAreaEnabled(quintptr identifier, bool enable);
- void setContentBorderEnabled(bool enable);
+ void setContentBorderEnabled(bool enable) override;
bool testContentBorderAreaPosition(int position) const;
void applyContentBorderThickness(NSWindow *window = nullptr);
void updateNSToolbar();
diff --git a/src/widgets/widgets/qmainwindow.cpp b/src/widgets/widgets/qmainwindow.cpp
index 7fabb4ae7c..9379fb04ef 100644
--- a/src/widgets/widgets/qmainwindow.cpp
+++ b/src/widgets/widgets/qmainwindow.cpp
@@ -67,9 +67,7 @@
#include "qtoolbar_p.h"
#endif
#include "qwidgetanimator_p.h"
-#ifdef Q_OS_MACOS
-#include <qpa/qplatformnativeinterface.h>
-#endif
+#include <QtGui/qpa/qplatformwindow.h>
QT_BEGIN_NAMESPACE
@@ -1351,28 +1349,23 @@ bool QMainWindow::event(QEvent *event)
\since 5.2
*/
-void QMainWindow::setUnifiedTitleAndToolBarOnMac(bool set)
+void QMainWindow::setUnifiedTitleAndToolBarOnMac(bool enabled)
{
#ifdef Q_OS_MACOS
+ if (!isWindow())
+ return;
+
Q_D(QMainWindow);
- if (isWindow()) {
- d->useUnifiedToolBar = set;
- createWinId();
-
- QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface();
- if (!nativeInterface)
- return; // Not Cocoa platform plugin.
- QPlatformNativeInterface::NativeResourceForIntegrationFunction function =
- nativeInterface->nativeResourceFunctionForIntegration("setContentBorderEnabled");
- if (!function)
- return; // Not Cocoa platform plugin.
-
- typedef void (*SetContentBorderEnabledFunction)(QWindow *window, bool enable);
- (reinterpret_cast<SetContentBorderEnabledFunction>(function))(window()->windowHandle(), set);
- update();
- }
+ d->useUnifiedToolBar = enabled;
+ createWinId();
+
+ using namespace QPlatformInterface::Private;
+ if (auto *platformWindow = dynamic_cast<QCocoaWindow*>(window()->windowHandle()->handle()))
+ platformWindow->setContentBorderEnabled(enabled);
+
+ update();
#else
- Q_UNUSED(set)
+ Q_UNUSED(enabled)
#endif
}