From 0e7eaef349710df71d0f9492d9d098ba76882e6d Mon Sep 17 00:00:00 2001 From: Stephan Witt Date: Sat, 8 Mar 2014 12:49:40 +0100 Subject: [PATCH] * fix bug 8925: create a temporary action to avoid a menu with any action. Otherwise it will not shown on Mac OS X 10.9 with Cocoa --- src/frontends/qt4/Menus.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/frontends/qt4/Menus.cpp b/src/frontends/qt4/Menus.cpp index cc07afc5a9..8e9fd54b6e 100644 --- a/src/frontends/qt4/Menus.cpp +++ b/src/frontends/qt4/Menus.cpp @@ -1930,8 +1930,11 @@ void Menus::Impl::macxMenuBarInit(QMenuBar * qmb) QAction::AboutRole}, {LFUN_DIALOG_SHOW, "prefs", "Preferences", QAction::PreferencesRole}, - /* {LFUN_RECONFIGURE, "", "Reconfigure", - QAction::ApplicationSpecificRole}, */ +#if !(defined(QT_MAC_USE_COCOA) || (QT_VERSION >= 0x050000)) + /* This doesn't work with Cocoa. */ + {LFUN_RECONFIGURE, "", "Reconfigure", + QAction::ApplicationSpecificRole}, +#endif {LFUN_LYX_QUIT, "", "Quit LyX", QAction::QuitRole} }; const size_t num_entries = sizeof(entries) / sizeof(entries[0]); @@ -1953,19 +1956,10 @@ void Menus::Impl::macxMenuBarInit(QMenuBar * qmb) MenuDefinition::const_iterator cit = mac_special_menu_.begin(); MenuDefinition::const_iterator end = mac_special_menu_.end(); for (size_t i = 0 ; cit != end ; ++cit, ++i) { -#if defined(QT_MAC_USE_COCOA) && (QT_MAC_USE_COCOA > 0) - if (first_call || entries[i].role != QAction::ApplicationSpecificRole) { - Action * action = new Action(QIcon(), cit->label(), - cit->func(), QString(), qMenu); - action->setMenuRole(entries[i].role); - qMenu->addAction(action); - } -#else Action * action = new Action(QIcon(), cit->label(), cit->func(), QString(), qMenu); action->setMenuRole(entries[i].role); qMenu->addAction(action); -#endif } } @@ -2283,6 +2277,14 @@ void Menus::fillMenuBar(QMenuBar * qmb, GuiView * view, bool initial) Menu * menu = new Menu(view, m->submenuname(), true); menu->setTitle(label(*m)); + +#if defined(Q_WS_MACX) && (defined(QT_MAC_USE_COCOA) || (QT_VERSION >= 0x050000)) + // On Mac OS with QT/cocoa, the menu is not displayed if there is no action + // so we create a temporary one here + QAction * action = new QAction(menu); + menu->addAction(action); +#endif + qmb->addMenu(menu); d->name_map_[view][name] = menu;