Stefan Schimanski wrote:

Am 09.03.2008 um 19:06 schrieb Andre Poenitz:

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?

No, not at all. It was only meant as a quick fix. Feel free to move the GuiPopupMenu class into the header again.

Yes, I'll do that.

Abdel.

Reply via email to