From 92a32e050fe0c545d0b7b70501c224d09f8d9ed6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Fri, 28 Aug 2020 11:58:30 +0200 Subject: Remove QMacNativeWidget and QMacCocoaViewContainer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The functionality should be available via QWidget::winId(), and QWidget::createWindowContainer() + QWindow::fromWinId(). Any bugs in this area should be fixed by improving the general wrapping APIs. Fixes: QTBUG-83254 Change-Id: I86584a4a8138d17d65a50da39efd58039f10da91 Reviewed-by: Morten Johan Sørvig --- src/widgets/CMakeLists.txt | 2 - src/widgets/doc/snippets/qmacnativewidget/main.mm | 94 ---------- src/widgets/widgets/qmaccocoaviewcontainer_mac.h | 70 -------- src/widgets/widgets/qmaccocoaviewcontainer_mac.mm | 199 ---------------------- src/widgets/widgets/qmacnativewidget_mac.h | 69 -------- src/widgets/widgets/qmacnativewidget_mac.mm | 166 ------------------ src/widgets/widgets/qmenu.cpp | 7 +- src/widgets/widgets/qmenu_mac.mm | 6 +- src/widgets/widgets/widgets.pri | 8 - 9 files changed, 5 insertions(+), 616 deletions(-) delete mode 100644 src/widgets/doc/snippets/qmacnativewidget/main.mm delete mode 100644 src/widgets/widgets/qmaccocoaviewcontainer_mac.h delete mode 100644 src/widgets/widgets/qmaccocoaviewcontainer_mac.mm delete mode 100644 src/widgets/widgets/qmacnativewidget_mac.h delete mode 100644 src/widgets/widgets/qmacnativewidget_mac.mm (limited to 'src/widgets') diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index b20f4a514d..2fb5f64967 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -302,8 +302,6 @@ qt_extend_target(Widgets CONDITION MSVC AND (TEST_architecture_arch STREQUAL "i3 qt_extend_target(Widgets CONDITION MACOS SOURCES kernel/qmacgesturerecognizer.cpp kernel/qmacgesturerecognizer_p.h - widgets/qmaccocoaviewcontainer_mac.h widgets/qmaccocoaviewcontainer_mac.mm - widgets/qmacnativewidget_mac.h widgets/qmacnativewidget_mac.mm LIBRARIES ${FWAppKit} z diff --git a/src/widgets/doc/snippets/qmacnativewidget/main.mm b/src/widgets/doc/snippets/qmacnativewidget/main.mm deleted file mode 100644 index 45e39c4953..0000000000 --- a/src/widgets/doc/snippets/qmacnativewidget/main.mm +++ /dev/null @@ -1,94 +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:BSD$ -** 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. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#import - -int main(int argc, char **argv) -{ - QApplication app(argc, argv); -//![0] - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - NSWindow *window = [[NSWindow alloc] initWithContentRect:NSMakeRect(200, app.desktop()->height() - 200, 239, 200) - styleMask:NSTitledWindowMask | NSClosableWindowMask - | NSMiniaturizableWindowMask | NSResizableWindowMask - backing:NSBackingStoreBuffered defer:NO]; - - QMacNativeWidget *nativeWidget = new QMacNativeWidget(); - nativeWidget->move(0, 0); - nativeWidget->setPalette(QPalette(Qt::red)); - nativeWidget->setAutoFillBackground(true); - QVBoxLayout *layout = new QVBoxLayout(); - QPushButton *pushButton = new QPushButton("An Embedded Qt Button!", nativeWidget); - pushButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // Don't use the layout rect calculated from QMacStyle. - layout->addWidget(pushButton); - nativeWidget->setLayout(layout); - - // Adjust Cocoa layouts - NSView *nativeWidgetView = reinterpret_cast(nativeWidget->winId()); - NSView *contentView = [window contentView]; - [contentView setAutoresizesSubviews:YES]; - [nativeWidgetView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; - [nativeWidgetView setAutoresizesSubviews:YES]; - NSView *pushButtonView = reinterpret_cast(pushButton->winId()); - [pushButtonView setAutoresizingMask:NSViewWidthSizable]; - - // Add the nativeWidget to the window. - [contentView addSubview:nativeWidgetView positioned:NSWindowAbove relativeTo:nil]; - nativeWidget->show(); - pushButton->show(); - - // Show the window. - [window makeKeyAndOrderFront:window]; - [pool release]; -//![0] - return app.exec(); // gives us the same behavior in both -} diff --git a/src/widgets/widgets/qmaccocoaviewcontainer_mac.h b/src/widgets/widgets/qmaccocoaviewcontainer_mac.h deleted file mode 100644 index a9d075638f..0000000000 --- a/src/widgets/widgets/qmaccocoaviewcontainer_mac.h +++ /dev/null @@ -1,70 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module 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 QCOCOAVIEWCONTAINER_H -#define QCOCOAVIEWCONTAINER_H - -#include -#include - -Q_FORWARD_DECLARE_OBJC_CLASS(NSView); - -QT_BEGIN_NAMESPACE - -#if QT_DEPRECATED_SINCE(5, 15) -class QMacCocoaViewContainerPrivate; -class QT_DEPRECATED_X("Use QWindow::fromWinId and QWidget::createWindowContainer instead") -Q_WIDGETS_EXPORT QMacCocoaViewContainer : public QWidget -{ - Q_OBJECT -public: - QMacCocoaViewContainer(NSView *cocoaViewToWrap, QWidget *parent = nullptr); - virtual ~QMacCocoaViewContainer(); - - void setCocoaView(NSView *view); - NSView *cocoaView() const; - -private: - Q_DECLARE_PRIVATE(QMacCocoaViewContainer) -}; -#endif - -QT_END_NAMESPACE - -#endif // QCOCOAVIEWCONTAINER_H diff --git a/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm b/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm deleted file mode 100644 index d56c6ab68b..0000000000 --- a/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm +++ /dev/null @@ -1,199 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module 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$ -** -****************************************************************************/ - -#import -#include "qmaccocoaviewcontainer_mac.h" - -#include -#include -#include -#include -#include - -/*! - \class QMacCocoaViewContainer - \since 4.5 - - \brief The QMacCocoaViewContainer class provides a widget for \macos that can be used to wrap arbitrary - Cocoa views (i.e., NSView subclasses) and insert them into Qt hierarchies. - - \ingroup advanced - \inmodule QtWidgets - - While Qt offers a lot of classes for writing your application, Apple's - Cocoa frameworks offer functionality that is not currently available (or - may never end up) in Qt. Using QMacCocoaViewContainer, it is possible to take an - arbitrary NSView-derived class from Cocoa and put it in a Qt widgets hierarchy. - Depending on the level of integration you need, you can use QMacCocoaViewContainer - directly or subclass it to wrap more functionality of the underlying NSView. - - It should be also noted that, at the Cocoa level, there is a difference - between top-level windows and views (widgets that are inside a window). - For this reason, make sure that the NSView that you are wrapping doesn't - end up as a top-level window. The best way to ensure this is to make sure - QMacCocoaViewContainer's parent widget is not null. - - If you are using QMacCocoaViewContainer as a subclass and are accessing Cocoa API, - it is probably simpler to have your file end with \tt{.mm} instead of \tt{.cpp}. - Most Apple tools will correctly identify the source as Objective-C++. - - QMacCocoaViewContainer requires knowledge of how Cocoa works, especially in - regard to its reference counting (retain/release) nature. It is noted in - the functions below if there is any change in the reference count. Cocoa - views often generate temporary objects that are released by an autorelease - pool. If this is done outside of a running event loop, it is up to the - developer to provide the autorelease pool. - - The following is a snippet showing how to subclass QMacCocoaViewContainer - to wrap an NSSearchField. - - \code - SearchWidget::SearchWidget(QWidget *parent) - : QMacCocoaViewContainer(0, parent) - { - // Many Cocoa objects create temporary autorelease objects, - // so create a pool to catch them. - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - - // Create the NSSearchField, set it on the QCocoaViewContainer. - NSSearchField *search = [[NSSearchField alloc] init]; - setCocoaView(search); - - // Use a Qt menu for the search field menu. - QMenu *qtMenu = createMenu(this); - NSMenu *nsMenu = qtMenu->macMenu(0); - [[search cell] setSearchMenuTemplate:nsMenu]; - - // Release our reference, since our super class takes ownership and we - // don't need it anymore. - [search release]; - - // Clean up our pool as we no longer need it. - [pool release]; - } - \endcode -*/ - -QT_BEGIN_NAMESPACE - -class QMacCocoaViewContainerPrivate : public QWidgetPrivate -{ - QT_IGNORE_DEPRECATIONS(Q_DECLARE_PUBLIC(QMacCocoaViewContainer)) -public: - NSView *nsview; - QMacCocoaViewContainerPrivate(); - ~QMacCocoaViewContainerPrivate(); -}; - -QMacCocoaViewContainerPrivate::QMacCocoaViewContainerPrivate() - : nsview(0) -{ -} - -QMacCocoaViewContainerPrivate::~QMacCocoaViewContainerPrivate() -{ - [nsview release]; -} - -/*! - Create a new QMacCocoaViewContainer using the NSView pointer in - the \a view with parent, \a parent. QMacCocoaViewContainer will - retain the \a view. - -*/ -QMacCocoaViewContainer::QMacCocoaViewContainer(NSView *view, QWidget *parent) - : QWidget(*new QMacCocoaViewContainerPrivate, parent, {}) -{ - // Ensures that we have a QWindow, even if we're not a top level widget - setAttribute(Qt::WA_NativeWindow); - - setCocoaView(view); -} - -/*! - Destroy the QMacCocoaViewContainer and release the wrapped view. -*/ -QMacCocoaViewContainer::~QMacCocoaViewContainer() -{ - -} - -/*! - Returns the NSView that has been set on this container. -*/ -NSView *QMacCocoaViewContainer::cocoaView() const -{ - Q_D(const QMacCocoaViewContainer); - return d->nsview; -} - -/*! - Sets \a view as the NSView to contain and retains it. If this - container already had a view set, it will release the previously set view. -*/ -void QMacCocoaViewContainer::setCocoaView(NSView *view) -{ - Q_D(QMacCocoaViewContainer); - NSView *oldView = d->nsview; - [view retain]; - d->nsview = view; - - // Get rid of QWindow completely, and re-create a new vanilla one, which - // we will then re-configure to be a foreign window. - destroy(); - create(); - - // Can't use QWindow::fromWinId() here due to QWidget controlling its - // QWindow, and can't use QWidget::createWindowContainer() due to the - // QMacCocoaViewContainer class being public API instead of a factory - // function. - QWindow *window = windowHandle(); - window->destroy(); - qt_window_private(window)->create(false, WId(view)); - Q_ASSERT(window->handle()); - - [oldView release]; - - // The QWindow::destroy()) call above will explicitly hide this widget. - // Clear the hidden state here so it can be implicitly shown again. - setAttribute(Qt::WA_WState_Hidden, false); - -} - -QT_END_NAMESPACE diff --git a/src/widgets/widgets/qmacnativewidget_mac.h b/src/widgets/widgets/qmacnativewidget_mac.h deleted file mode 100644 index 751f520934..0000000000 --- a/src/widgets/widgets/qmacnativewidget_mac.h +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module 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 QMACNATIVEWIDGET_H -#define QMACNATIVEWIDGET_H - -#include -#include - -Q_FORWARD_DECLARE_OBJC_CLASS(NSView); - -QT_BEGIN_NAMESPACE - -#if QT_DEPRECATED_SINCE(5, 15) -class QT_DEPRECATED_X("Use QWidget::winId instead") -Q_WIDGETS_EXPORT QMacNativeWidget : public QWidget -{ - Q_OBJECT -public: - QMacNativeWidget(NSView *parentView = nullptr); - ~QMacNativeWidget(); - - QSize sizeHint() const override; - NSView *nativeView() const; - -protected: - bool event(QEvent *ev) override; -}; -#endif - -QT_END_NAMESPACE - -#endif // QMACNATIVEWIDGET_H diff --git a/src/widgets/widgets/qmacnativewidget_mac.mm b/src/widgets/widgets/qmacnativewidget_mac.mm deleted file mode 100644 index 874ca84b61..0000000000 --- a/src/widgets/widgets/qmacnativewidget_mac.mm +++ /dev/null @@ -1,166 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module 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$ -** -****************************************************************************/ - -#import -#include "qmacnativewidget_mac.h" - -#include -#include -#include -#include - -/*! - \class QMacNativeWidget - \since 4.5 - \brief The QMacNativeWidget class provides a widget for \macos that provides - a way to put Qt widgets into Cocoa hierarchies. - - \ingroup advanced - \inmodule QtWidgets - - On \macos, there is a difference between a window and view; - normally expressed as widgets in Qt. Qt makes assumptions about its - parent-child hierarchy that make it complex to put an arbitrary Qt widget - into a hierarchy of "normal" views from Apple frameworks. QMacNativeWidget - bridges the gap between views and windows and makes it possible to put a - hierarchy of Qt widgets into a non-Qt window or view. - - QMacNativeWidget pretends it is a window (i.e. isWindow() will return true), - but it cannot be shown on its own. It needs to be put into a window - when it is created or later through a native call. - - Here is an example showing how to put a QPushButton into a NSWindow: - - \snippet qmacnativewidget/main.mm 0 - - Note that QMacNativeWidget requires knowledge of Cocoa. All it - does is get the Qt hierarchy into a window not owned by Qt. It is then up - to the programmer to ensure it is placed correctly in the window and - responds correctly to events. -*/ - -QT_BEGIN_NAMESPACE - -namespace { -// TODO use QtMacExtras copy of this function when available. -inline QPlatformNativeInterface::NativeResourceForIntegrationFunction resolvePlatformFunction(const QByteArray &functionName) -{ - QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface(); - QPlatformNativeInterface::NativeResourceForIntegrationFunction function = - nativeInterface->nativeResourceFunctionForIntegration(functionName); - if (Q_UNLIKELY(!function)) - qWarning("Qt could not resolve function %s from " - "QGuiApplication::platformNativeInterface()->nativeResourceFunctionForIntegration()", - functionName.constData()); - return function; -} -} //namespsace - -NSView *getEmbeddableView(QWindow *qtWindow) -{ - // Make sure the platform window is created - qtWindow->create(); - - // Inform the window that it's a subwindow of a non-Qt window. This must be - // done after create() because we need to have a QPlatformWindow instance. - // The corresponding NSWindow will not be shown and can be deleted later. - typedef void (*SetEmbeddedInForeignViewFunction)(QPlatformWindow *window, bool embedded); - reinterpret_cast(resolvePlatformFunction("setEmbeddedInForeignView"))(qtWindow->handle(), true); - - // Get the Qt content NSView for the QWindow from the Qt platform plugin - QPlatformNativeInterface *platformNativeInterface = QGuiApplication::platformNativeInterface(); - NSView *qtView = (NSView *)platformNativeInterface->nativeResourceForWindow("nsview", qtWindow); - return qtView; // qtView is ready for use. -} - -/*! - Create a QMacNativeWidget with \a parentView as its "superview" (i.e., - parent). The \a parentView is a NSView pointer. -*/ -QMacNativeWidget::QMacNativeWidget(NSView *parentView) - : QWidget(0) -{ - Q_UNUSED(parentView); - - //d_func()->topData()->embedded = true; - setPalette(QPalette(Qt::transparent)); - setAttribute(Qt::WA_SetPalette, false); - setAttribute(Qt::WA_LayoutUsesWidgetRect); - setAttribute(Qt::WA_TranslucentBackground); - setAttribute(Qt::WA_NoSystemBackground, false); -} - -/*! - Destroy the QMacNativeWidget. -*/ -QMacNativeWidget::~QMacNativeWidget() -{ -} - -/*! - \reimp -*/ -QSize QMacNativeWidget::sizeHint() const -{ - // QMacNativeWidget really does not have any other choice - // than to fill its designated area. - if (windowHandle()) - return windowHandle()->size(); - return QWidget::sizeHint(); -} - -/*! - Returns the native view backing the QMacNativeWidget. - -*/ -NSView *QMacNativeWidget::nativeView() const -{ - winId(); - return getEmbeddableView(windowHandle()); -} - -/*! - \reimp -*/ -bool QMacNativeWidget::event(QEvent *ev) -{ - return QWidget::event(ev); -} - -QT_END_NAMESPACE diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index e63a7edc4a..c2ef383d28 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -50,9 +50,6 @@ #include "qlayout.h" #include "qpainter.h" #include -#ifdef Q_OS_MACOS -#include "qmacnativewidget_mac.h" -#endif #include "qapplication.h" #ifndef QT_NO_ACCESSIBILITY # include "qaccessible.h" @@ -3592,8 +3589,8 @@ void QMenu::actionEvent(QActionEvent *e) if (QWidget *widget = d->widgetItems.value(wa)) { #ifdef Q_OS_MACOS QWidget *p = widget->parentWidget(); - if (p != this && QT_IGNORE_DEPRECATIONS(qobject_cast(p))) { - // This widget was reparented into a native Mac view + if (p != this) { + // This widget was reparented into a container widget // (see QMenuPrivate::moveWidgetToPlatformItem). // Reset the parent and delete the native widget. widget->setParent(this); diff --git a/src/widgets/widgets/qmenu_mac.mm b/src/widgets/widgets/qmenu_mac.mm index 1be74bf27c..782676a4cf 100644 --- a/src/widgets/widgets/qmenu_mac.mm +++ b/src/widgets/widgets/qmenu_mac.mm @@ -49,7 +49,6 @@ QT_USE_NAMESPACE #include "qmenubar.h" #include "qmenubar_p.h" #endif -#include "qmacnativewidget_mac.h" #include #include @@ -125,13 +124,14 @@ void QMenu::setAsDockMenu() void QMenuPrivate::moveWidgetToPlatformItem(QWidget *widget, QPlatformMenuItem* item) { - auto *container = new QT_IGNORE_DEPRECATIONS(QMacNativeWidget); + auto *container = new QWidget; + container->setAttribute(Qt::WA_TranslucentBackground); QObject::connect(platformMenu, SIGNAL(destroyed()), container, SLOT(deleteLater())); container->resize(widget->sizeHint()); widget->setParent(container); widget->setVisible(true); - NSView *containerView = container->nativeView(); + NSView *containerView = reinterpret_cast(container->winId()); QWindow *containerWindow = container->windowHandle(); Qt::WindowFlags wf = containerWindow->flags(); containerWindow->setFlags(wf | Qt::SubWindow); diff --git a/src/widgets/widgets/widgets.pri b/src/widgets/widgets/widgets.pri index 55804c5aaf..3caf2912f9 100644 --- a/src/widgets/widgets/widgets.pri +++ b/src/widgets/widgets/widgets.pri @@ -357,14 +357,6 @@ qtConfig(widgettextcontrol) { } macx { - HEADERS += \ - widgets/qmacnativewidget_mac.h \ - widgets/qmaccocoaviewcontainer_mac.h - - OBJECTIVE_SOURCES += \ - widgets/qmacnativewidget_mac.mm \ - widgets/qmaccocoaviewcontainer_mac.mm - qtConfig(menu)|qtConfig(menubar) { SOURCES += widgets/qmenu_mac.mm } -- cgit v1.2.3