On Sun, Mar 09, 2008 at 02:20:34PM +0100, Stefan Schimanski wrote: > > Am 09.03.2008 um 13:03 schrieb Abdelrazak Younes: > >> Stefan Schimanski wrote: >>> Mac has lost the menu contents. They appear in the menubar, but the popup >>> does not appear. >> >> I'll try to investigate. '-dbg gui' should give you some hints of what's >> going wrong. >> >> Abdel. > > diff --git a/src/frontends/qt4/Menus.cpp b/src/frontends/qt4/Menus.cpp > index c51b4ac..c77666d 100644 > --- a/src/frontends/qt4/Menus.cpp > +++ b/src/frontends/qt4/Menus.cpp > @@ -281,13 +281,13 @@ public: > }; > > /// a submenu > -class GuiPopupMenu : public QMenu > +class GuiPopupMenu : public GuiPopupMenuBase > { > public: > /// > GuiPopupMenu(GuiView * gv, MenuItem const & mi, bool top_level) > - : QMenu(gv), top_level_menu(top_level? new Menu : 0), > view(gv), > - name(mi.submenuname()) > + : GuiPopupMenuBase(gv), top_level_menu(top_level? new Menu > : 0), > + view(gv), name(mi.submenuname()) > { > setTitle(label(mi)); > } > @@ -301,19 +301,20 @@ public: > /// Get a Menu item label from the menu backend > QString label(MenuItem const & mi) const; > > - void showEvent(QShowEvent * ev) > - { > - if (top_level_menu) > - guiApp->menus().updateMenu(name); > - QMenu::showEvent(ev); > - } > - > /// Only needed for top level menus. > Menu * top_level_menu; > /// our owning view > GuiView * view; > /// the name of this menu > QString name; > + > +private Q_SLOTS: > + /// > + void updateView() > + { > + if (top_level_menu) > + guiApp->menus().updateMenu(name); > + } > }; > > /// Helper for std::find_if > diff --git a/src/frontends/qt4/Menus.h b/src/frontends/qt4/Menus.h > index daafcd3..f17a567 100644 > --- a/src/frontends/qt4/Menus.h > +++ b/src/frontends/qt4/Menus.h > @@ -15,9 +15,10 @@ > > #include "support/docstring.h" > > +#include <Qmenu> > + > #include <vector> > > -class QMenu; > class QString; > > namespace lyx { > @@ -56,6 +57,24 @@ private: > Impl * const d; > }; > > + > +class GuiPopupMenuBase : public QMenu > +{ > + Q_OBJECT > + > +public: > + /// > + GuiPopupMenuBase(QWidget * parent = 0) > + : QMenu(parent) > + { > + connect(this, SIGNAL(aboutToShow()), this, > SLOT(updateView())); > + } > + > +private Q_SLOTS: > + /// > + virtual void updateView() = 0; > +}; > + > } // namespace frontend > } // namespace lyx
Is there a real need for the intermediate class? Andre'