diff options
Diffstat (limited to 'src/widgets/widgets/qmenu_mac.mm')
-rw-r--r-- | src/widgets/widgets/qmenu_mac.mm | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/src/widgets/widgets/qmenu_mac.mm b/src/widgets/widgets/qmenu_mac.mm new file mode 100644 index 0000000000..41c4481b74 --- /dev/null +++ b/src/widgets/widgets/qmenu_mac.mm @@ -0,0 +1,140 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#import <Foundation/Foundation.h> +#import <Cocoa/Cocoa.h> + +#include "qmenu.h" +#include "qmenubar.h" + +#include <QtCore/QDebug> +#include <QtGui/QGuiApplication> +#include <QtGui/QWindow> +#include <qpa/qplatformnativeinterface.h> + +QT_BEGIN_NAMESPACE + +#ifndef QT_NO_MENU + +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 (!function) + qWarning() << "Qt could not resolve function" << functionName + << "from QGuiApplication::platformNativeInterface()->nativeResourceFunctionForIntegration()"; + return function; +} +} //namespsace + + +/*! + \since 5.2 + + Returns the native NSMenu for this menu. Available on OS X only. +*/ +NSMenu* QMenu::toNSMenu() +{ + // Call into the cocoa platform plugin: qMenuToNSMenu(platformMenu()) + QPlatformNativeInterface::NativeResourceForIntegrationFunction function = resolvePlatformFunction("qmenutonsmenu"); + if (function) { + typedef void* (*QMenuToNSMenuFunction)(QPlatformMenu *platformMenu); + return reinterpret_cast<NSMenu *>(reinterpret_cast<QMenuToNSMenuFunction>(function)(platformMenu())); + } + return nil; +} + + +/*! + \since 5.2 + + Set this menu to be the dock menu available by option-clicking + on the application dock icon. Available on OS X only. +*/ +void QMenu::setAsDockMenu() +{ + // Call into the cocoa platform plugin: setDockMenu(platformMenu()) + QPlatformNativeInterface::NativeResourceForIntegrationFunction function = resolvePlatformFunction("setdockmenu"); + if (function) { + typedef void (*SetDockMenuFunction)(QPlatformMenu *platformMenu); + reinterpret_cast<SetDockMenuFunction>(function)(platformMenu()); + } +} + + +/*! \fn void qt_mac_set_dock_menu(QMenu *menu) + \since 5.2 + \deprecated + + Set this menu to be the dock menu available by option-clicking + on the application dock icon. Available on OS X only. + + Deprecated; use QMenu:setAsDockMenu() instead. + + \sa QMenu:setAsDockMenu() +*/ + +#endif //QT_NO_MENU + +#ifndef QT_NO_MENUBAR + +/*! + \since 5.2 + + Returns the native NSMenu for this menu bar. Available on OS X only. +*/ +NSMenu* QMenuBar::toNSMenu() +{ + // Call into the cocoa platform plugin: qMenuBarToNSMenu(platformMenuBar()) + QPlatformNativeInterface::NativeResourceForIntegrationFunction function = resolvePlatformFunction("qmenubartonsmenu"); + if (function) { + typedef void* (*QMenuBarToNSMenuFunction)(QPlatformMenuBar *platformMenuBar); + return reinterpret_cast<NSMenu *>(reinterpret_cast<QMenuBarToNSMenuFunction>(function)(platformMenuBar())); + } + return nil; +} +#endif //QT_NO_MENUBAR + +QT_END_NAMESPACE + |