From d7fc2fb5c666e58facfa15e64551a80dfda2c9d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Wed, 13 May 2020 19:36:51 +0200 Subject: macOS: Remove QMenu indirection via QPlatformNativeInterface Task-number: QTBUG-83252 Change-Id: I0c750d2b1912ced343d96ea0ca081c3319be2889 Reviewed-by: Volker Hilsheimer --- src/plugins/platforms/cocoa/qcocoamenu.h | 4 +++- src/plugins/platforms/cocoa/qcocoamenu.mm | 7 ++++++ src/plugins/platforms/cocoa/qcocoamenubar.h | 4 ++-- .../platforms/cocoa/qcocoanativeinterface.h | 9 ------- .../platforms/cocoa/qcocoanativeinterface.mm | 28 ---------------------- 5 files changed, 12 insertions(+), 40 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/platforms/cocoa/qcocoamenu.h b/src/plugins/platforms/cocoa/qcocoamenu.h index 852642498b..bacc1f75cd 100644 --- a/src/plugins/platforms/cocoa/qcocoamenu.h +++ b/src/plugins/platforms/cocoa/qcocoamenu.h @@ -52,6 +52,7 @@ QT_BEGIN_NAMESPACE class QCocoaMenuBar; class QCocoaMenu : public QPlatformMenu, public QCocoaMenuObject + , public QPlatformInterface::Private::QCocoaMenu { public: QCocoaMenu(); @@ -76,7 +77,8 @@ public: void setMinimumWidth(int width) override; void setFont(const QFont &font) override; - NSMenu *nsMenu() const; + NSMenu *nsMenu() const override; + void setAsDockMenu() const override; inline bool isVisible() const { return m_visible; } diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm index c19fd5b752..8937765f6b 100644 --- a/src/plugins/platforms/cocoa/qcocoamenu.mm +++ b/src/plugins/platforms/cocoa/qcocoamenu.mm @@ -52,6 +52,7 @@ #include "qcocoamenubar.h" #include "qcocoawindow.h" #include "qcocoascreen.h" +#include "qcocoaapplicationdelegate.h" QT_BEGIN_NAMESPACE @@ -104,6 +105,12 @@ NSMenu *QCocoaMenu::nsMenu() const return static_cast(m_nativeMenu); } +void QCocoaMenu::setAsDockMenu() const +{ + QMacAutoReleasePool pool; + QCocoaApplicationDelegate.sharedDelegate.dockMenu = m_nativeMenu; +} + void QCocoaMenu::insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before) { QMacAutoReleasePool pool; diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.h b/src/plugins/platforms/cocoa/qcocoamenubar.h index 50b6e69720..94333e3bb1 100644 --- a/src/plugins/platforms/cocoa/qcocoamenubar.h +++ b/src/plugins/platforms/cocoa/qcocoamenubar.h @@ -50,6 +50,7 @@ QT_BEGIN_NAMESPACE class QCocoaWindow; class QCocoaMenuBar : public QPlatformMenuBar + , public QPlatformInterface::Private::QCocoaMenuBar { Q_OBJECT public: @@ -63,8 +64,7 @@ public: QWindow *parentWindow() const override; QPlatformMenu *menuForTag(quintptr tag) const override; - inline NSMenu *nsMenu() const - { return m_nativeMenu; } + NSMenu *nsMenu() const override { return m_nativeMenu; } static void updateMenuBarImmediately(); diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.h b/src/plugins/platforms/cocoa/qcocoanativeinterface.h index 4f82faf39b..faa4e72e46 100644 --- a/src/plugins/platforms/cocoa/qcocoanativeinterface.h +++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.h @@ -84,15 +84,6 @@ private: static void removeFromMimeList(void *macPasteboardMime); static void registerDraggedTypes(const QStringList &types); - // Dock menu support - static void setDockMenu(QPlatformMenu *platformMenu); - - // Function to return NSMenu * from QPlatformMenu - static void *qMenuToNSMenu(QPlatformMenu *platformMenu); - - // Function to return NSMenu * from QPlatformMenuBar - static void *qMenuBarToNSMenu(QPlatformMenuBar *platformMenuBar); - // Set a QWindow as a "guest" (subwindow) of a non-QWindow static void setEmbeddedInForeignView(QPlatformWindow *window, bool embedded); diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm index 77187f2d20..3b11afa8a3 100644 --- a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm +++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm @@ -102,12 +102,6 @@ QPlatformNativeInterface::NativeResourceForIntegrationFunction QCocoaNativeInter return NativeResourceForIntegrationFunction(QCocoaNativeInterface::removeFromMimeList); if (resource.toLower() == "registerdraggedtypes") return NativeResourceForIntegrationFunction(QCocoaNativeInterface::registerDraggedTypes); - if (resource.toLower() == "setdockmenu") - return NativeResourceForIntegrationFunction(QCocoaNativeInterface::setDockMenu); - if (resource.toLower() == "qmenutonsmenu") - return NativeResourceForIntegrationFunction(QCocoaNativeInterface::qMenuToNSMenu); - if (resource.toLower() == "qmenubartonsmenu") - return NativeResourceForIntegrationFunction(QCocoaNativeInterface::qMenuBarToNSMenu); if (resource.toLower() == "registertouchwindow") return NativeResourceForIntegrationFunction(QCocoaNativeInterface::registerTouchWindow); if (resource.toLower() == "setembeddedinforeignview") @@ -189,28 +183,6 @@ void QCocoaNativeInterface::registerDraggedTypes(const QStringList &types) qt_mac_registerDraggedTypes(types); } -void QCocoaNativeInterface::setDockMenu(QPlatformMenu *platformMenu) -{ - QMacAutoReleasePool pool; - QCocoaMenu *cocoaPlatformMenu = static_cast(platformMenu); - NSMenu *menu = cocoaPlatformMenu->nsMenu(); - [QCocoaApplicationDelegate sharedDelegate].dockMenu = menu; -} - -void *QCocoaNativeInterface::qMenuToNSMenu(QPlatformMenu *platformMenu) -{ - QCocoaMenu *cocoaPlatformMenu = static_cast(platformMenu); - NSMenu *menu = cocoaPlatformMenu->nsMenu(); - return reinterpret_cast(menu); -} - -void *QCocoaNativeInterface::qMenuBarToNSMenu(QPlatformMenuBar *platformMenuBar) -{ - QCocoaMenuBar *cocoaPlatformMenuBar = static_cast(platformMenuBar); - NSMenu *menu = cocoaPlatformMenuBar->nsMenu(); - return reinterpret_cast(menu); -} - void QCocoaNativeInterface::setEmbeddedInForeignView(QPlatformWindow *window, bool embedded) { Q_UNUSED(embedded); // "embedded" state is now automatically detected -- cgit v1.2.3