diff options
author | Andy Shaw <andy.shaw@digia.com> | 2012-09-28 15:58:58 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-10-26 14:53:09 +0200 |
commit | 356f3c89b83704591e3c37cf8c322b52d6840763 (patch) | |
tree | 05b381f1d5c4086516fa42947ab7937b422fd34e /src | |
parent | a3941c2f6ef31986bd315fa41bc4df7330a89109 (diff) |
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 <pasi.matilainen@digia.com>
Reviewed-by: James Turner <james.turner@kdab.com>
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/kernel/qplatformmenu.h | 1 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenu.h | 1 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenu.mm | 6 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenuitem.mm | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qmenubar.cpp | 2 |
5 files changed, 11 insertions, 1 deletions
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); } } |