>>>>> "Bennett" == Bennett Helm <[EMAIL PROTECTED]> writes:

>> Final checks:
>> 
>> - did you check that stuff like Document>Settings is not removed?

Bennett> Yes: that is there.

>> - what happens in non-english locale?

Bennett> I checked with LANG=FR_fr. Accents appear correctly. But in
Bennett> this case the LyX menu on the left does not have About LyX,
Bennett> and the Preferences item is grayed out (but note that in this
Bennett> case no accents). There is a "special" menu immediately to
Bennett> the right of the left LyX menu, containing "À Propos de LyX"
Bennett> and "Préférences" items, both of which work correctly. There
Bennett> is a Document > Paramètres menu item.

Bennett> Also, the rightmost LyX menu remains.

If I am not mistaken, the following patch should make menus work fine
in english. If it does, I will apply it and then we will research what
to do for localized versions.

JMarc

Index: src/frontends/qt4/GuiView.h
===================================================================
--- src/frontends/qt4/GuiView.h	(revision 16343)
+++ src/frontends/qt4/GuiView.h	(working copy)
@@ -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);
Index: src/frontends/qt4/QLMenubar.C
===================================================================
--- src/frontends/qt4/QLMenubar.C	(revision 16343)
+++ src/frontends/qt4/QLMenubar.C	(working copy)
@@ -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
Index: src/frontends/qt4/QLPopupMenu.C
===================================================================
--- src/frontends/qt4/QLPopupMenu.C	(revision 16343)
+++ src/frontends/qt4/QLPopupMenu.C	(working copy)
@@ -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(Me
 	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 &
 	}
 }
 
-/// \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
 
Index: src/frontends/qt4/GuiView.C
===================================================================
--- src/frontends/qt4/GuiView.C	(revision 16343)
+++ src/frontends/qt4/GuiView.C	(working copy)
@@ -219,25 +219,6 @@ void GuiView::init()
 	updateToolbars();
 	updateLayoutChoice();
 	updateMenubar();
-
-#ifdef Q_WS_MACX
-	// Qt docs:
-	// "quit or exit	Application Menu | Quit <application name>	
-	// 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));
 }
 
 
Index: src/frontends/qt4/QLPopupMenu.h
===================================================================
--- src/frontends/qt4/QLPopupMenu.h	(revision 16343)
+++ src/frontends/qt4/QLPopupMenu.h	(working copy)
@@ -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

Reply via email to