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'

Reply via email to