Mac has lost the menu contents. They appear in the menubar, but the popup does not appear.

Stefan

Am 08.03.2008 um 17:15 schrieb [EMAIL PROTECTED]:

Author: younes
Date: Sat Mar  8 17:15:34 2008
New Revision: 23565

URL: http://www.lyx.org/trac/changeset/23565
Log:
various cleanup and simplifications

Modified:
   lyx-devel/trunk/src/frontends/qt4/Menus.cpp

Modified: lyx-devel/trunk/src/frontends/qt4/Menus.cpp
URL: 
http://www.lyx.org/trac/file/lyx-devel/trunk/src/frontends/qt4/Menus.cpp?rev=23565
= = = = = = = = ======================================================================
--- lyx-devel/trunk/src/frontends/qt4/Menus.cpp (original)
+++ lyx-devel/trunk/src/frontends/qt4/Menus.cpp Sat Mar 8 17:15:34 2008
@@ -199,7 +199,6 @@
        typedef std::vector<MenuItem> ItemList;
        ///
        typedef ItemList::const_iterator const_iterator;
-
        ///
        explicit Menu(QString const & name = QString()) : name_(name) {}

@@ -224,9 +223,6 @@
        // names in a stack.
bool searchMenu(FuncRequest const & func, std::vector<docstring> & names)
                const;
-
-private:
-       friend class Menus;
        ///
        bool hasFunc(FuncRequest const &) const;
        /// Add the menu item unconditionally
@@ -249,7 +245,7 @@
        void expandPasteRecent();
        void expandToolbars();
        void expandBranches(Buffer const * buf);
-
+       ///
        ItemList items_;
        ///
        QString name_;
@@ -260,10 +256,10 @@
{
public:
        ///
-       GuiPopupMenu(GuiView * owner, MenuItem const & mi, bool top_level)
-               : QMenu(owner), owner_(owner), top_level_(top_level)
+       GuiPopupMenu(GuiView * gv, MenuItem const & mi, bool top_level)
+               : QMenu(gv), top_level_menu(top_level? new Menu : 0), view(gv),
+               name(mi.submenuname())
        {
-               name_ = mi.submenuname();
                setTitle(label(mi));
        }

@@ -276,20 +272,17 @@

        void showEvent(QShowEvent * ev)
        {
-               if (top_level_)
-                       guiApp->menus().updateMenu(name_);
+               if (top_level_menu)
+                       guiApp->menus().updateMenu(name);
                QMenu::showEvent(ev);
        }

-       bool const top_level_;
-
-       ///
-       Menu topLevelMenu_;
-
+       /// Only needed for top level menus.
+       Menu * top_level_menu;
        /// our owning view
-       GuiView * owner_;
+       GuiView * view;
        /// the name of this menu
-       QString name_;
+       QString name;
};


@@ -318,32 +311,18 @@
                return;
        }
        LYXERR(Debug::GUI, " *****  menu entries " << menu->size());
-
        Menu::const_iterator m = menu->begin();
        Menu::const_iterator end = menu->end();
-
        for (; m != end; ++m) {
-
-               if (m->kind() == MenuItem::Separator) {
-
+               if (m->kind() == MenuItem::Separator)
                        qMenu->addSeparator();
-                       LYXERR(Debug::GUI, "adding Menubar Separator");
-
-               } else if (m->kind() == MenuItem::Submenu) {
-
-                       LYXERR(Debug::GUI, "** creating New Sub-Menu "
-                               << fromqstr(label(*m)));
+               else if (m->kind() == MenuItem::Submenu) {
                        QMenu * subMenu = qMenu->addMenu(label(*m));
                        populate(subMenu, m->submenu());
-
-               } else { // we have a MenuItem::Command
-
-                       LYXERR(Debug::GUI, "creating Menu Item "
-                               << fromqstr(m->label()));
-
-                       Action * action = new Action(*owner_,
-                               QIcon(), label(*m), m->func(), QString());
-                       qMenu->addAction(action);
+               } else {
+                       // we have a MenuItem::Command
+                       qMenu->addAction(new Action(*view, QIcon(), label(*m), 
m->func(),
+                               QString()));
                }
        }
}
@@ -371,6 +350,7 @@

} // namespace anon

+
struct Menus::Impl {
        ///
        void add(Menu const &);
@@ -380,15 +360,6 @@
        Menu & getMenu(QString const &);
        ///
        Menu const & getMenu(QString const &) const;
-       ///
-       bool empty() const { return menulist_.empty(); }
-       /** This defines a menu whose entries list the FuncRequests
-           that will be removed by expand() in other menus. This is
-           used by the Qt/Mac code
-       */
-       void setSpecialMenu(Menu const & menu) { specialmenu_ = menu; }
-       ///
-       Menu const & specialMenu() { return specialmenu_; }

        /// Expands some special entries of the menu
        /** The entries with the following kind are expanded to a
@@ -397,24 +368,21 @@
        */
        void expand(Menu const & frommenu, Menu & tomenu,
                    Buffer const *) const;
-       ///
-       const_iterator begin() const { return menulist_.begin(); }
-       ///
-       iterator begin() { return menulist_.begin(); }
-       ///
-       const_iterator end() const { return menulist_.end(); }
-       ///
-       iterator end() { return menulist_.end(); }
-
-       ///
-       MenuList menulist_;
-       ///
-       Menu menubar_;
-       ///
-       Menu specialmenu_;

        /// Initialize specific MACOS X menubar
        void macxMenuBarInit(GuiView * view);
+
+       /// Mac special menu.
+       /** This defines a menu whose entries list the FuncRequests
+           that will be removed by expand() in other menus. This is
+           used by the Qt/Mac code
+       */
+       Menu specialmenu_;
+
+       ///
+       MenuList menulist_;
+       ///
+       Menu menubar_;

        typedef QHash<QString, GuiPopupMenu *> NameMap;

@@ -490,23 +458,23 @@
{
        GuiPopupMenu * qmenu = d->name_map_[name];
        LYXERR(Debug::GUI, "GuiPopupMenu::updateView()"
-               << "\tTriggered menu: " << fromqstr(qmenu->name_));
+               << "\tTriggered menu: " << fromqstr(qmenu->name));
        qmenu->clear();

-       if (qmenu->name_.isEmpty())
+       if (qmenu->name.isEmpty())
                return;

        // Here, We make sure that theLyXFunc points to the correct LyXView.
-       theLyXFunc().setLyXView(qmenu->owner_);
-
-       Menu const & fromLyxMenu = d->getMenu(qmenu->name_);
- d->expand(fromLyxMenu, qmenu->topLevelMenu_, qmenu->owner_- >buffer());
-
-       if (!d->hasMenu(qmenu->topLevelMenu_.name())) {
+       theLyXFunc().setLyXView(qmenu->view);
+
+       Menu const & fromLyxMenu = d->getMenu(qmenu->name);
+ d->expand(fromLyxMenu, *qmenu->top_level_menu, qmenu->view- >buffer());
+
+       if (!d->hasMenu(qmenu->top_level_menu->name())) {
                LYXERR(Debug::GUI, "\tWARNING: menu seems empty"
-                       << fromqstr(qmenu->topLevelMenu_.name()));
-       }
-       qmenu->populate(qmenu, &qmenu->topLevelMenu_);
+                       << fromqstr(qmenu->top_level_menu->name()));
+       }
+       qmenu->populate(qmenu, qmenu->top_level_menu);
}


@@ -585,22 +553,17 @@
        const size_t num_entries = sizeof(entries) / sizeof(entries[0]);

        // the special menu for Menus.
-       Menu special;
        for (size_t i = 0 ; i < num_entries ; ++i) {
                FuncRequest const func(entries[i].action,
                                       from_utf8(entries[i].arg));
-               special.add(MenuItem(MenuItem::Command, entries[i].label, 
func));
-       }
-       setSpecialMenu(special);
+ specialmenu_.add(MenuItem(MenuItem::Command, entries[i].label, func));
+       }

        // add the entries to a QMenu that will eventually be empty
        // and therefore invisible.
        QMenu * qMenu = view->menuBar()->addMenu("special");
-
-       // we do not use 'special' because it is a temporary variable,
-       // whereas Menus::specialMenu points to a persistent copy.
-       Menu::const_iterator cit = specialMenu().begin();
-       Menu::const_iterator end = specialMenu().end();
+       Menu::const_iterator cit = specialmenu_.begin();
+       Menu::const_iterator end = specialmenu_.end();
        for (size_t i = 0 ; cit != end ; ++cit, ++i) {
                Action * action = new Action(*view, QIcon(), cit->label(),
                                             cit->func(), QString());
@@ -1472,8 +1435,7 @@
        }

        // we do not want the menu to end with a separator
-       if (!tomenu.empty()
-           && tomenu.items_.back().kind() == MenuItem::Separator)
+ if (!tomenu.empty() && tomenu.items_.back().kind() == MenuItem::Separator)
                tomenu.items_.pop_back();

        // Check whether the shortcuts are unique
@@ -1516,9 +1478,9 @@
                case md_menu: {
                        lex.next(true);
                        QString const name = toqstr(lex.getDocString());
-                       if (d->hasMenu(name)) {
+                       if (d->hasMenu(name))
                                d->getMenu(name).read(lex);
-                       } else {
+                       else {
                                Menu menu(name);
                                menu.read(lex);
                                d->add(menu);
@@ -1546,26 +1508,29 @@

bool Menus::Impl::hasMenu(QString const & name) const
{
-       return find_if(begin(), end(), MenuNamesEqual(name)) != end();
+       return find_if(menulist_.begin(), menulist_.end(),
+               MenuNamesEqual(name)) != menulist_.end();
}


Menu const & Menus::Impl::getMenu(QString const & name) const
{
-       const_iterator cit = find_if(begin(), end(), MenuNamesEqual(name));
-       if (cit == end())
+       const_iterator cit = find_if(menulist_.begin(), menulist_.end(),
+               MenuNamesEqual(name));
+       if (cit == menulist_.end())
                lyxerr << "No submenu named " << fromqstr(name) << endl;
-       BOOST_ASSERT(cit != end());
+       BOOST_ASSERT(cit != menulist_.end());
        return (*cit);
}


Menu & Menus::Impl::getMenu(QString const & name)
{
-       iterator it = find_if(begin(), end(), MenuNamesEqual(name));
-       if (it == end())
+       iterator it = find_if(menulist_.begin(), menulist_.end(),
+               MenuNamesEqual(name));
+       if (it == menulist_.end())
                lyxerr << "No submenu named " << fromqstr(name) << endl;
-       BOOST_ASSERT(it != end());
+       BOOST_ASSERT(it != menulist_.end());
        return (*it);
}




Reply via email to