diff --git a/src/frontends/qt4/GuiView.C b/src/frontends/qt4/GuiView.C index 0877822c8b..8634752410 100644 --- a/src/frontends/qt4/GuiView.C +++ b/src/frontends/qt4/GuiView.C @@ -219,25 +219,6 @@ void GuiView::init() updateToolbars(); updateLayoutChoice(); updateMenubar(); - -#ifdef Q_WS_MACX - // Qt docs: - // "quit or exit Application Menu | Quit - // If this entry is not found a default Quit item will be created to call - // QApplication::quit()" - QMenu * lyxMenu = menuBar()->addMenu("&LyX"); - QAction * quitAction = new QAction(tr("&Quit"), this); - lyxMenu->addAction(quitAction); - connect(quitAction, SIGNAL(triggered()),this, SLOT(macQuit())); -#endif - -} - - -void GuiView::macQuit() -{ - // this slot is only called on Mac - dispatch(FuncRequest(LFUN_LYX_QUIT)); } diff --git a/src/frontends/qt4/GuiView.h b/src/frontends/qt4/GuiView.h index 5aaa1e9c89..255606be50 100644 --- a/src/frontends/qt4/GuiView.h +++ b/src/frontends/qt4/GuiView.h @@ -103,9 +103,6 @@ public Q_SLOTS: void normalSizedIcons(); void bigSizedIcons(); - /// slot needed by the Mac - void macQuit(); - protected: /// make sure we quit cleanly virtual void closeEvent(QCloseEvent * e); diff --git a/src/frontends/qt4/QLMenubar.C b/src/frontends/qt4/QLMenubar.C index 67a8e60798..bbe027d076 100644 --- a/src/frontends/qt4/QLMenubar.C +++ b/src/frontends/qt4/QLMenubar.C @@ -14,6 +14,7 @@ // All is well if the namespace is visible first. #include "GuiView.h" +#include "Action.h" #include "QLMenubar.h" #include "QLPopupMenu.h" @@ -126,6 +127,8 @@ MenuBackend const & QLMenubar::backend() } +/// Some special Qt/Mac support hacks + /* Here is what the Qt documentation says about how a menubar is chosen: @@ -156,17 +159,44 @@ QMenuBar * QLMenubar::menuBar() const #endif } +#ifdef Q_WS_MACX +# define MERGE_MAC_MENUS +# ifndef MERGE_MAC_MENUS +extern void qt_mac_set_menubar_merge(bool b); +# endif +#endif + void QLMenubar::macxMenuBarInit() { #ifdef Q_WS_MACX mac_menubar_.reset(new QMenuBar); +# ifdef MERGE_MAC_MENUS + /* The qt/mac menu code has a very silly hack that moves some + menu entries that it recognizes by name (e.g. + "Preferences...") to the "LyX" menu. This feature can only + work if the menu entries are always available. Since we + build menus on demand, we add the entries to a dummy menu + (JMarc) + */ + // this is the name of the menu that contains our special entries - menubackend_.specialMenu(lyx::from_ascii("LyX")); - // make sure that the special entries are added to the first - // menu even before this menu has been opened. - //name_map_[menubackend_.getMenubar().begin()->submenuname()]->update(); -#endif + docstring const & specialname = from_ascii("LyX"); + if (menubackend_.hasMenu(specialname)) { + QMenu * qMenu = owner_->menuBar()->addMenu("special"); + //qMenu->setVisible(false); + + menubackend_.specialMenu(specialname); + Menu const & special = menubackend_.getMenu(specialname); + Menu::const_iterator end = special.end(); + for (Menu::const_iterator cit = special.begin(); + cit != end ; ++cit) + qMenu->addAction(new Action(*owner_, cit->label(), cit->func())); + } +# else + qt_mac_set_menubar_merge(false); +# endif // MERGE_MAC_MENUS +#endif // Q_WS_MACX } } // namespace frontend diff --git a/src/frontends/qt4/QLPopupMenu.C b/src/frontends/qt4/QLPopupMenu.C index 3acc391ee0..9410f60281 100644 --- a/src/frontends/qt4/QLPopupMenu.C +++ b/src/frontends/qt4/QLPopupMenu.C @@ -41,8 +41,6 @@ namespace lyx { namespace frontend { -// MacOSX specific stuff is at the end. - QLPopupMenu::QLPopupMenu(QLMenubar * owner, MenuItem const & mi, bool topLevelMenu) : owner_(owner) @@ -77,8 +75,6 @@ void QLPopupMenu::update() lyxerr[Debug::GUI] << "\tWARNING: menu seems empty" << lyx::to_utf8(topLevelMenu_.name()) << endl; } populate(this, &topLevelMenu_); - - specialMacXmenuHack(); } void QLPopupMenu::populate(QMenu* qMenu, Menu * menu) @@ -138,7 +134,6 @@ docstring const QLPopupMenu::getLabel(MenuItem const & mi) return label; } -/// \todo Mac specific binding handling. void QLPopupMenu::addBinding(docstring & label, MenuItem const & mi) { docstring const binding(mi.binding()); @@ -147,31 +142,6 @@ void QLPopupMenu::addBinding(docstring & label, MenuItem const & mi) } } -/// \todo Fix Mac specific menu hack -void QLPopupMenu::specialMacXmenuHack() -{ -#ifdef Q_WS_MACX - /* The qt/mac menu code has a very silly hack that - moves some menu entries that it recognizes by name - (e.g. "Preferences...") to the "LyX" menu. This - feature can only work if the menu entries are - always available. Since we build menus on demand, - we add some dummy contents to one of the menus (JMarc) - */ -/* - static QLPopupMenu * themenu = this; - if (themenu == this && owner_->backend().hasMenu("LyX")) { - Menu special = owner_->backend().getMenu("LyX"); - Menu::const_iterator end = special.end(); - Menu::size_type i = 0; - for (Menu::const_iterator cit = special.begin(); - cit != end ; ++cit, ++i) - insertItem(toqstr(cit->label()), indexOffset + i); - } -*/ -#endif -} - } // namespace frontend } // namespace lyx diff --git a/src/frontends/qt4/QLPopupMenu.h b/src/frontends/qt4/QLPopupMenu.h index 4c4fed5623..c565990e16 100644 --- a/src/frontends/qt4/QLPopupMenu.h +++ b/src/frontends/qt4/QLPopupMenu.h @@ -50,15 +50,10 @@ private: lyx::docstring const getLabel(MenuItem const & mi); /// add binding keys a the menu item label. - /// \todo Mac specific binding handling. void addBinding(lyx::docstring & label, MenuItem const & mi); /// Top Level Menu Menu topLevelMenu_; - - /// Mac specific menu hack - /// \todo Fix it - void specialMacXmenuHack(); }; } // namespace frontend