kernel/qplatformcursor.h \
kernel/qplatformclipboard.h \
kernel/qplatformnativeinterface.h \
+ kernel/qplatformmenu.h \
kernel/qsurfaceformat.h \
kernel/qguiapplication.h \
kernel/qguiapplication_p.h \
kernel/qplatformcursor_qpa.cpp \
kernel/qplatformclipboard_qpa.cpp \
kernel/qplatformnativeinterface_qpa.cpp \
+ kernel/qplatformmenu_qpa.cpp \
kernel/qsessionmanager_qpa.cpp \
kernel/qsurfaceformat.cpp \
kernel/qguiapplication.cpp \
--- /dev/null
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2012 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author James Turner <james.turner@kdab.com>
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia 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.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPLATFORMMENU_H
+#define QPLATFORMMENU_H
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qpointer.h>
+#include <QtGui/QFont>
+#include <QtGui/QKeySequence>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QPlatformMenu;
+class Q_GUI_EXPORT QPlatformMenuItem : public QObject
+{
+Q_OBJECT
+public:
+ // copied from, and must stay in sync with, QAction menu roles.
+ enum MenuRole { NoRole = 0, TextHeuristicRole, ApplicationSpecificRole, AboutQtRole,
+ AboutRole, PreferencesRole, QuitRole };
+
+ virtual void setTag(quintptr tag);
+ virtual quintptr tag() const;
+
+ virtual void setText(const QString &text);
+ virtual void setIcon(const QImage &icon);
+ virtual void setMenu(QPlatformMenu *menu);
+ virtual void setVisible(bool isVisible);
+ virtual void setIsSeparator(bool isSeparator);
+ virtual void setFont(const QFont &font);
+ virtual void setRole(MenuRole role);
+ virtual void setChecked(bool isChecked);
+ virtual void setShortcut(const QKeySequence& shortcut);
+ virtual void setEnabled(bool enabled);
+Q_SIGNALS:
+ void activated();
+ void hovered();
+};
+
+class Q_GUI_EXPORT QPlatformMenu : public QPlatformMenuItem // Some (but not all) of the PlatformMenuItem API applies to QPlatformMenu as well.
+{
+Q_OBJECT
+public:
+ virtual void insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before);
+ virtual void removeMenuItem(QPlatformMenuItem *menuItem);
+ virtual void syncMenuItem(QPlatformMenuItem *menuItem);
+ virtual void syncSeparatorsCollapsible(bool enable);
+
+ virtual QPlatformMenuItem *menuItemAt(int position) const;
+ virtual QPlatformMenuItem *menuItemForTag(quintptr tag) const;
+Q_SIGNALS:
+ void aboutToShow();
+ void aboutToHide();
+};
+
+class Q_GUI_EXPORT QPlatformMenuBar : public QPlatformMenu
+{
+Q_OBJECT
+public:
+ virtual void insertMenu(QPlatformMenu *menu, QPlatformMenu *before);
+ virtual void removeMenu(QPlatformMenu *menu);
+ virtual void syncMenu(QPlatformMenuItem *menuItem);
+ virtual void handleReparent(QWindow *newParentWindow);
+
+ virtual QPlatformMenu *menuForTag(quintptr tag) const;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
+
/****************************************************************************
**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2012 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author James Turner <james.turner@kdab.com>
** Contact: http://www.qt-project.org/
**
-** This file is part of the QtWidgets module of the Qt Toolkit.
+** This file is part of the QtGui module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
QT_BEGIN_NAMESPACE
-/*!
- \class QPlatformMenuAction
- \since 5.0
- \internal
- \preliminary
- \ingroup qpa
+void QPlatformMenuItem::setText(const QString &text)
+{
+
+}
+
+void QPlatformMenuItem::setIcon(const QImage &icon)
+{
+
+}
+
+void QPlatformMenuItem::setMenu(QPlatformMenu *menu)
+{
+
+}
+
+void QPlatformMenuItem::setVisible(bool isVisible)
+{
+
+}
+
+void QPlatformMenuItem::setIsSeparator(bool isSeparator)
+{
+
+}
+
+void QPlatformMenuItem::setFont(const QFont &font)
+{
- \brief The QPlatformMenuAction class provides an abstraction for menu actions.
- */
+}
-QPlatformMenuAction::~QPlatformMenuAction()
+void QPlatformMenuItem::setRole(QPlatformMenuItem::MenuRole role)
{
}
-/*!
- \class QPlatformMenu
- \since 5.0
- \internal
- \preliminary
- \ingroup qpa
+void QPlatformMenuItem::setChecked(bool isChecked)
+{
+
+}
- \brief The QPlatformMenu class provides an abstraction for menus.
- */
-QPlatformMenu::QPlatformMenu()
+void QPlatformMenuItem::setShortcut(const QKeySequence& shortcut)
{
+
}
-QPlatformMenu::~QPlatformMenu()
+void QPlatformMenuItem::setEnabled(bool enabled)
{
}
-void QPlatformMenu::setMenuEnabled(bool enable)
+void QPlatformMenuItem::setTag(quintptr tag)
{
- Q_UNUSED(enable);
+}
+
+quintptr QPlatformMenuItem::tag() const
+{
+ return 0;
+}
+
+void QPlatformMenu::insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem* before)
+{
+
+}
+
+void QPlatformMenu::removeMenuItem(QPlatformMenuItem *menuItem)
+{
+
+}
+
+void QPlatformMenu::syncMenuItem(QPlatformMenuItem *menuItem)
+{
+
}
void QPlatformMenu::syncSeparatorsCollapsible(bool enable)
{
- Q_UNUSED(enable);
+
}
-/*!
- \class QPlatformMenuBar
- \since 5.0
- \internal
- \preliminary
- \ingroup qpa
+QPlatformMenuItem* QPlatformMenu::menuItemAt(int position) const
+{
+ return 0;
+}
+
+QPlatformMenuItem* QPlatformMenu::menuItemForTag(quintptr tag) const
+{
+ return 0;
+}
+
+void QPlatformMenuBar::insertMenu(QPlatformMenu *menuItem, QPlatformMenu* before)
+{
+
+}
+
+void QPlatformMenuBar::removeMenu(QPlatformMenu *menuItem)
+{
+
+}
- \brief The QPlatformMenuBar class provides an abstraction for menu bars.
- */
-QPlatformMenuBar::QPlatformMenuBar()
+void QPlatformMenuBar::syncMenu(QPlatformMenuItem *menuItem)
{
}
-QPlatformMenuBar::~QPlatformMenuBar()
+void QPlatformMenuBar::handleReparent(QWindow *newParentWindow)
{
}
-void QPlatformMenuBar::handleReparent(QWidget *newParent)
+QPlatformMenu *QPlatformMenuBar::menuForTag(quintptr tag) const
{
- Q_UNUSED(newParent);
+ Q_UNUSED(tag);
+ return 0;
}
QT_END_NAMESPACE
class QMenu;
class QMenuBar;
+class QPlatformMenuItem;
class QPlatformMenu;
class QPlatformMenuBar;
class QPlatformDialogHelper;
virtual ~QPlatformTheme();
- virtual QPlatformMenu *createPlatformMenu(QMenu *menu = 0) const;
- virtual QPlatformMenuBar *createPlatformMenuBar(QMenuBar *menuBar = 0) const;
+ virtual QPlatformMenuItem* createPlatformMenuItem() const;
+ virtual QPlatformMenu* createPlatformMenu() const;
+ virtual QPlatformMenuBar* createPlatformMenuBar() const;
virtual bool usePlatformNativeDialog(DialogType type) const;
virtual QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const;
}
-QPlatformMenu *QPlatformTheme::createPlatformMenu(QMenu *menu) const
-{
- Q_UNUSED(menu);
- return 0;
-}
-
-QPlatformMenuBar *QPlatformTheme::createPlatformMenuBar(QMenuBar *menuBar) const
-{
- Q_UNUSED(menuBar);
- return 0;
-}
-
bool QPlatformTheme::usePlatformNativeDialog(DialogType type) const
{
Q_UNUSED(type);
return QVariant();
}
+QPlatformMenuItem *QPlatformTheme::createPlatformMenuItem() const
+{
+ return 0;
+}
+
+QPlatformMenu *QPlatformTheme::createPlatformMenu() const
+{
+ return 0;
+}
+
+QPlatformMenuBar *QPlatformTheme::createPlatformMenuBar() const
+{
+ return 0;
+}
+
QT_END_NAMESPACE
qcocoamenuloader.mm \
qcocoaapplicationdelegate.mm \
qcocoaapplication.mm \
- qcocoamenu.mm \
- qmenu_mac.mm \
qcocoahelpers.mm \
qmultitouch_mac.mm \
qcocoaaccessibilityelement.mm \
qcocoamenuloader.h \
qcocoaapplicationdelegate.h \
qcocoaapplication.h \
- qcocoamenu.h \
- qmenu_mac.h \
qcocoahelpers.h \
qmultitouch_mac_p.h \
qcocoaaccessibilityelement.h \
#include "qcocoahelpers.h"
#include "qcocoaapplication.h"
#include "qcocoaapplicationdelegate.h"
-#include "qmenu_mac.h"
#include "qcocoafiledialoghelper.h"
#include "qcocoatheme.h"
#include "qcocoainputcontext.h"
#include "qcocoamenuloader.h"
-#include "qmenu_mac.h"
#include "qcocoahelpers.h"
#include <QtCore/private/qcore_mac_p.h>
- (void)qtUpdateMenubar
{
+#if 0
QCocoaMenuBar::macUpdateMenuBarImmediatly();
+#endif
}
- (void)qtTranslateApplicationMenu
{
qDebug() << "qtTranslateApplicationMenu";
-
-#ifndef QT_NO_TRANSLATION
+#if 0
+ //#ifndef QT_NO_TRANSLATION
[servicesItem setTitle: QCFString::toNSString(qt_mac_applicationmenu_string(0))];
[hideItem setTitle: QCFString::toNSString(qt_mac_applicationmenu_string(1).arg(qt_mac_applicationName()))];
[hideAllOthersItem setTitle: QCFString::toNSString(qt_mac_applicationmenu_string(2))];
- (IBAction)qtDispatcherToQAction:(id)sender
{
+#if 0
//
//QScopedLoopLevelCounter loopLevelCounter(QApplicationPrivate::instance()->threadData);
NSMenuItem *item = static_cast<NSMenuItem *>(sender);
// normal QApplication::quit().
qApp->quit();
}
+#endif
}
- (void)orderFrontCharacterPalette:(id)sender
QCocoaTheme();
~QCocoaTheme();
- QPlatformMenu *createPlatformMenu(QMenu *menu = 0) const;
- QPlatformMenuBar *createPlatformMenuBar(QMenuBar *menuBar = 0) const;
-
bool usePlatformNativeDialog(DialogType dialogType) const;
QPlatformDialogHelper *createPlatformDialogHelper(DialogType dialogType) const;
#include "qcocoatheme.h"
-#include "qmenu_mac.h"
+#include <QVariant>
+
#include "qcocoacolordialoghelper.h"
#include "qcocoafiledialoghelper.h"
#include "qcocoafontdialoghelper.h"
delete m_systemPalette;
}
-QPlatformMenu *QCocoaTheme::createPlatformMenu(QMenu *menu) const
-{
- return new QCocoaMenu(menu);
-}
-
-QPlatformMenuBar *QCocoaTheme::createPlatformMenuBar(QMenuBar *menuBar) const
-{
- return new QCocoaMenuBar(menuBar);
-}
-
-
bool QCocoaTheme::usePlatformNativeDialog(DialogType dialogType) const
{
if (dialogType == QPlatformTheme::FileDialog)
kernel/qsoftkeymanager_p.h \
kernel/qsoftkeymanager_common_p.h \
kernel/qdesktopwidget_qpa_p.h \
- kernel/qwidgetwindow_qpa_p.h \
- kernel/qplatformmenu.h
+ kernel/qwidgetwindow_qpa_p.h
SOURCES += \
kernel/qaction.cpp \
kernel/qapplication_qpa.cpp \
kernel/qdesktopwidget_qpa.cpp \
kernel/qwidget_qpa.cpp \
- kernel/qwidgetwindow_qpa.cpp \
- kernel/qplatformmenu_qpa.cpp
+ kernel/qwidgetwindow_qpa.cpp
+
# TODO
false:!x11:mac {
kernel/qclipboard_mac.cpp \
kernel/qmime_mac.cpp \
kernel/qt_mac.cpp \
- kernel/qkeymapper_mac.cpp
+ kernel/qkeymapper_mac.cpp
OBJECTIVE_HEADERS += \
qcocoawindow_mac_p.h \
Q_PROPERTY(Priority priority READ priority WRITE setPriority)
public:
- enum MenuRole { NoRole, TextHeuristicRole, ApplicationSpecificRole, AboutQtRole,
+ // note this is copied into qplatformmenu.h, which must stay in sync
+ enum MenuRole { NoRole = 0, TextHeuristicRole, ApplicationSpecificRole, AboutQtRole,
AboutRole, PreferencesRole, QuitRole };
enum SoftKeyRole {
NoSoftKey, PositiveSoftKey, NegativeSoftKey, SelectSoftKey };
+++ /dev/null
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtGui module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** 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, Nokia gives you certain additional
-** rights. These rights are described in the Nokia 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.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QPLATFORMMENU_H
-#define QPLATFORMMENU_H
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qpointer.h>
-#include <QtWidgets/qaction.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QMenuPrivate;
-class Q_WIDGETS_EXPORT QPlatformMenuAction
-{
-public:
- virtual ~QPlatformMenuAction();
- QPointer<QAction> action;
-};
-
-class Q_WIDGETS_EXPORT QPlatformMenu {
-public:
- QPlatformMenu();
- virtual ~QPlatformMenu();
-
- virtual bool merged(const QAction *action) const = 0;
-
- virtual void addAction(QAction *action, QAction *before) = 0;
- virtual void removeAction(QAction *action) = 0;
- virtual void syncAction(QAction *action) = 0;
-
- virtual void setMenuEnabled(bool enable);
- virtual void syncSeparatorsCollapsible(bool enable);
-};
-
-class Q_WIDGETS_EXPORT QPlatformMenuBar {
-public:
- QPlatformMenuBar();
- virtual ~QPlatformMenuBar();
-
- virtual void addAction(QAction *action, QAction *before = 0) = 0;
- virtual void syncAction(QAction *action) = 0;
- virtual void removeAction(QAction *action) = 0;
-
- virtual void handleReparent(QWidget *newParent);
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif
-
scroll->scrollFlags = QMenuPrivate::QMenuScroller::ScrollNone;
}
- platformMenu = QGuiApplicationPrivate::platformTheme()->createPlatformMenu(q);
+ platformMenu = QGuiApplicationPrivate::platformTheme()->createPlatformMenu();
+ if (platformMenu) {
+ QObject::connect(platformMenu, SIGNAL(aboutToShow()), q, SIGNAL(aboutToShow()));
+ QObject::connect(platformMenu, SIGNAL(aboutToHide()), q, SIGNAL(aboutToHide()));
+ }
#ifdef QT_SOFTKEYS_ENABLED
selectAction = QSoftKeyManager::createKeyedAction(QSoftKeyManager::SelectSoftKey, Qt::Key_Select, q);
d->tornPopup->setEnabled(isEnabled());
d->menuAction->setEnabled(isEnabled());
if (d->platformMenu)
- d->platformMenu->setMenuEnabled(isEnabled());
+ d->platformMenu->setEnabled(isEnabled());
}
QWidget::changeEvent(e);
}
}
}
+void copyActionToPlatformItem(const QAction *action, QPlatformMenuItem* item)
+{
+ item->setText(action->text());
+ item->setIsSeparator(action->isSeparator());
+// item->setIcon(action->icon());
+ item->setVisible(action->isVisible());
+ item->setShortcut(action->shortcut());
+ item->setChecked(action->isChecked());
+ item->setFont(action->font());
+ item->setRole((QPlatformMenuItem::MenuRole) action->menuRole());
+ item->setEnabled(action->isEnabled());
+
+ if (action->menu()) {
+ item->setMenu(action->menu()->platformMenu());
+ } else {
+ item->setMenu(0);
+ }
+}
+
/*!
\reimp
*/
}
if (d->platformMenu) {
- if (e->type() == QEvent::ActionAdded)
- d->platformMenu->addAction(e->action(), e->before());
- else if (e->type() == QEvent::ActionRemoved)
- d->platformMenu->removeAction(e->action());
- else if (e->type() == QEvent::ActionChanged)
- d->platformMenu->syncAction(e->action());
+ if (e->type() == QEvent::ActionAdded) {
+ QPlatformMenuItem *menuItem =
+ QGuiApplicationPrivate::platformTheme()->createPlatformMenuItem();
+ menuItem->setTag(reinterpret_cast<quintptr>(e->action()));
+ QObject::connect(menuItem, SIGNAL(activated()), e->action(), SLOT(trigger()));
+ copyActionToPlatformItem(e->action(), menuItem);
+ QPlatformMenuItem* beforeItem = d->platformMenu->menuItemForTag(reinterpret_cast<quintptr>(e->before()));
+ d->platformMenu->insertMenuItem(menuItem, beforeItem);
+ } else if (e->type() == QEvent::ActionRemoved) {
+ QPlatformMenuItem *menuItem = d->platformMenu->menuItemForTag(reinterpret_cast<quintptr>(e->action()));
+ d->platformMenu->removeMenuItem(menuItem);
+ } else if (e->type() == QEvent::ActionChanged) {
+ QPlatformMenuItem *menuItem = d->platformMenu->menuItemForTag(reinterpret_cast<quintptr>(e->action()));
+ copyActionToPlatformItem(e->action(), menuItem);
+ d->platformMenu->syncMenuItem(menuItem);
+ }
+
+ d->platformMenu->syncSeparatorsCollapsible(d->collapsibleSeparators);
}
#if defined(Q_OS_WINCE) && !defined(QT_NO_MENUBAR)
#include <qwhatsthis.h>
#include <qpa/qplatformtheme.h>
#include "private/qguiapplication_p.h"
+#include "qplatformintegration_qpa.h"
#ifndef QT_NO_MENUBAR
q->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
q->setAttribute(Qt::WA_CustomWhatsThis);
- platformMenuBar = QGuiApplicationPrivate::platformTheme()->createPlatformMenuBar(q);
+ platformMenuBar = QGuiApplicationPrivate::platformTheme()->createPlatformMenuBar();
if (platformMenuBar)
q->hide();
d->setCurrentAction(0);
}
+QPlatformMenu *getPlatformMenu(QAction *action)
+{
+ if (!action || !action->menu())
+ return 0;
+
+ return action->menu()->platformMenu();
+}
+
/*!
\reimp
*/
#endif
if (!nativeMenuBar)
return;
- if(e->type() == QEvent::ActionAdded)
- nativeMenuBar->addAction(e->action(), e->before());
- else if(e->type() == QEvent::ActionRemoved)
- nativeMenuBar->removeAction(e->action());
- else if(e->type() == QEvent::ActionChanged)
- nativeMenuBar->syncAction(e->action());
+
+ if (e->type() == QEvent::ActionAdded) {
+ QPlatformMenu *menu = getPlatformMenu(e->action());
+ if (menu) {
+ QPlatformMenu* beforeMenu = NULL;
+ for (int beforeIndex = d->indexOf(e->action()) + 1;
+ !beforeMenu && (beforeIndex < actions().size());
+ ++beforeIndex)
+ {
+ beforeMenu = getPlatformMenu(actions().at(beforeIndex));
+ }
+
+ menu->setTag(reinterpret_cast<quintptr>(e->action()));
+ menu->setText(e->action()->text());
+ d->platformMenuBar->insertMenu(menu, beforeMenu);
+ }
+ } else if (e->type() == QEvent::ActionRemoved) {
+ QPlatformMenu *menu = getPlatformMenu(e->action());
+ if (menu)
+ d->platformMenuBar->removeMenu(menu);
+ } else if (e->type() == QEvent::ActionChanged) {
+ QPlatformMenu* cur = d->platformMenuBar->menuForTag(reinterpret_cast<quintptr>(e->action()));
+ QPlatformMenu *menu = getPlatformMenu(e->action());
+
+ // the menu associated with the action can change, need to
+ // remove and/or insert the new platform menu
+ if (menu != cur) {
+ if (cur)
+ d->platformMenuBar->removeMenu(cur);
+ if (menu) {
+ menu->setTag(reinterpret_cast<quintptr>(e->action()));
+
+ QPlatformMenu* beforeMenu = NULL;
+ for (int beforeIndex = d->indexOf(e->action()) + 1;
+ !beforeMenu && (beforeIndex < actions().size());
+ ++beforeIndex)
+ {
+ beforeMenu = getPlatformMenu(actions().at(beforeIndex));
+ }
+ d->platformMenuBar->insertMenu(menu, beforeMenu);
+ }
+ } else if (menu) {
+ menu->setText(e->action()->text());
+ d->platformMenuBar->syncMenu(menu);
+ }
+ }
}
if(e->type() == QEvent::ActionAdded) {
oldParent = newParent;
oldWindow = newWindow;
- if (platformMenuBar)
- platformMenuBar->handleReparent(newParent);
+ if (platformMenuBar) {
+ if (newWindow) {
+ // force the underlying platform window to be created, since
+ // the platform menubar needs it (and we have no other way to
+ // discover when the platform window is created)
+ newWindow->createWinId();
+ platformMenuBar->handleReparent(newWindow->windowHandle());
+ } else {
+ platformMenuBar->handleReparent(0);
+ }
+ }
#ifdef Q_OS_WINCE
if (qt_wince_is_mobile() && wce_menubar)
d->platformMenuBar = 0;
} else {
if (!d->platformMenuBar)
- d->platformMenuBar = QGuiApplicationPrivate::platformTheme()->createPlatformMenuBar(this);
+ d->platformMenuBar = QGuiApplicationPrivate::platformTheme()->createPlatformMenuBar();
}
updateGeometry();
#include "QtWidgets/qstyleoption.h"
#include <private/qmenu_p.h> // Mac needs what in this file!
+#include <qpa/qplatformmenu.h>
QT_BEGIN_NAMESPACE
QBasicTimer autoReleaseTimer;
QPlatformMenuBar *platformMenuBar;
+ inline int indexOf(QAction *act) const { return q_func()->actions().indexOf(act); }
+
#ifdef Q_OS_WINCE
void wceCreateMenuBar(QWidget *);
void wceDestroyMenuBar();