From 356f3c89b83704591e3c37cf8c322b52d6840763 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Fri, 28 Sep 2012 15:58:58 +0200 Subject: Fix syncing of visibility and enabled for menus on Cocoa Fixed menu handling on Cocoa so if a menu is enabled/disabled or made visible or not then it will keep this in sync with the appropriate native menu entry. Change-Id: If269185fcf065fb1b2f60d6ef8c27c107eb4509f Reviewed-by: Pasi Matilainen Reviewed-by: James Turner Reviewed-by: Andy Shaw --- src/gui/kernel/qplatformmenu.h | 1 + src/plugins/platforms/cocoa/qcocoamenu.h | 1 + src/plugins/platforms/cocoa/qcocoamenu.mm | 6 ++++++ src/plugins/platforms/cocoa/qcocoamenuitem.mm | 2 +- src/widgets/widgets/qmenubar.cpp | 2 ++ 5 files changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gui/kernel/qplatformmenu.h b/src/gui/kernel/qplatformmenu.h index 64f738b331..7e7ccdb294 100644 --- a/src/gui/kernel/qplatformmenu.h +++ b/src/gui/kernel/qplatformmenu.h @@ -102,6 +102,7 @@ public: virtual void setText(const QString &text) = 0; virtual void setEnabled(bool enabled) = 0; + virtual void setVisible(bool visible) = 0; virtual QPlatformMenuItem *menuItemAt(int position) const = 0; virtual QPlatformMenuItem *menuItemForTag(quintptr tag) const = 0; diff --git a/src/plugins/platforms/cocoa/qcocoamenu.h b/src/plugins/platforms/cocoa/qcocoamenu.h index 38952a2e5d..3afe089225 100644 --- a/src/plugins/platforms/cocoa/qcocoamenu.h +++ b/src/plugins/platforms/cocoa/qcocoamenu.h @@ -70,6 +70,7 @@ public: void removeMenuItem(QPlatformMenuItem *menuItem); void syncMenuItem(QPlatformMenuItem *menuItem); void setEnabled(bool enabled); + void setVisible(bool visible); void syncSeparatorsCollapsible(bool enable); void syncModalState(bool modal); diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm index 4d35b3202e..36d5c81f34 100644 --- a/src/plugins/platforms/cocoa/qcocoamenu.mm +++ b/src/plugins/platforms/cocoa/qcocoamenu.mm @@ -268,6 +268,12 @@ void QCocoaMenu::setParentItem(QCocoaMenuItem *item) void QCocoaMenu::setEnabled(bool enabled) { m_enabled = enabled; + syncModalState(!m_enabled); +} + +void QCocoaMenu::setVisible(bool visible) +{ + [m_nativeItem setSubmenu:(visible ? m_nativeMenu : nil)]; } QPlatformMenuItem *QCocoaMenu::menuItemAt(int position) const diff --git a/src/plugins/platforms/cocoa/qcocoamenuitem.mm b/src/plugins/platforms/cocoa/qcocoamenuitem.mm index 150d3eef7d..d78ff73bb6 100644 --- a/src/plugins/platforms/cocoa/qcocoamenuitem.mm +++ b/src/plugins/platforms/cocoa/qcocoamenuitem.mm @@ -263,7 +263,7 @@ NSMenuItem *QCocoaMenuItem::sync() // [m_native setHidden:YES]; // [m_native setHidden:NO]; [m_native setHidden: !m_isVisible]; - + [m_native setEnabled: m_enabled]; QString text = m_text; QKeySequence accel = m_shortcut; diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp index e53dc2cac2..f6665cba9a 100644 --- a/src/widgets/widgets/qmenubar.cpp +++ b/src/widgets/widgets/qmenubar.cpp @@ -1285,6 +1285,8 @@ void QMenuBar::actionEvent(QActionEvent *e) } } else if (menu) { menu->setText(e->action()->text()); + menu->setVisible(e->action()->isVisible()); + menu->setEnabled(e->action()->isEnabled()); d->platformMenuBar->syncMenu(menu); } } -- cgit v1.2.3