Hi all,

This patch disables all submenus in the menu bar that have no enabled items.

The code for determining whether a submenu should be enabled is already present, but it is not used because the following line was missing:

           subMenu->setEnabled(m->status().enabled());

However, as there are a lot of submenus (which should be disabled) that have "No Document Open" items, I'm wondering whether this is a work-around or whether it is the design to have these submenus always enabled.

Anyway, this patch also removes all these useless "No Document Open" menuitems.

Any objections ?

Vincent
Index: src/frontends/qt4/Menus.cpp
===================================================================
--- src/frontends/qt4/Menus.cpp (revision 27986)
+++ src/frontends/qt4/Menus.cpp (working copy)
@@ -715,12 +715,8 @@
 
 void MenuDefinition::expandFormats(MenuItem::Kind kind, Buffer const * buf)
 {
-       if (!buf && kind != MenuItem::ImportFormats) {
-               add(MenuItem(MenuItem::Command,
-                                   qt_("No Document Open!"),
-                                   FuncRequest(LFUN_NOACTION)));
+       if (!buf && kind != MenuItem::ImportFormats)
                return;
-       }
 
        typedef vector<Format const *> Formats;
        Formats formats;
@@ -795,11 +791,8 @@
 
 void MenuDefinition::expandFloatListInsert(Buffer const * buf)
 {
-       if (!buf) {
-               add(MenuItem(MenuItem::Command, qt_("No Document Open!"),
-                                   FuncRequest(LFUN_NOACTION)));
+       if (!buf)
                return;
-       }
 
        FloatList const & floats = buf->params().documentClass().floats();
        FloatList::const_iterator cit = floats.begin();
@@ -815,11 +808,8 @@
 
 void MenuDefinition::expandFloatInsert(Buffer const * buf)
 {
-       if (!buf) {
-               add(MenuItem(MenuItem::Command, qt_("No Document Open!"),
-                                   FuncRequest(LFUN_NOACTION)));
+       if (!buf)
                return;
-       }
 
        FloatList const & floats = buf->params().documentClass().floats();
        FloatList::const_iterator cit = floats.begin();
@@ -837,11 +827,9 @@
 void MenuDefinition::expandFlexInsert(
                Buffer const * buf, InsetLayout::InsetLyXType type)
 {
-       if (!buf) {
-               add(MenuItem(MenuItem::Command, qt_("No Document Open!"),
-                                   FuncRequest(LFUN_NOACTION)));
+       if (!buf)
                return;
-       }
+
        TextClass::InsetLayouts const & insetLayouts =
                buf->params().documentClass().insetLayouts();
        TextClass::InsetLayouts::const_iterator cit = insetLayouts.begin();
@@ -925,11 +913,8 @@
        // know that all the entries in a TOC will be have status_ ==
        // OK, so we avoid this unnecessary overhead (JMarc)
 
-       if (!buf) {
-               add(MenuItem(MenuItem::Command, qt_("No Document Open!"),
-                                   FuncRequest(LFUN_NOACTION)));
+       if (!buf)
                return;
-       }
 
        // Add an entry for the master doc if this is a child doc
        Buffer const * const master = buf->masterBuffer();
@@ -1030,20 +1015,12 @@
 
 void MenuDefinition::expandBranches(Buffer const * buf)
 {
-       if (!buf) {
-               add(MenuItem(MenuItem::Command,
-                                   qt_("No Document Open!"),
-                                   FuncRequest(LFUN_NOACTION)));
+       if (!buf)
                return;
-       }
 
        BufferParams const & params = buf->masterBuffer()->params();
-       if (params.branchlist().empty()) {
-               add(MenuItem(MenuItem::Command,
-                                   qt_("No Branch in Document!"),
-                                   FuncRequest(LFUN_NOACTION)));
+       if (params.branchlist().empty())
                return;
-       }
 
        BranchList::const_iterator cit = params.branchlist().begin();
        BranchList::const_iterator end = params.branchlist().end();
@@ -1063,12 +1040,8 @@
 
 void MenuDefinition::expandCiteStyles(BufferView const * bv)
 {
-       if (!bv) {
-               add(MenuItem(MenuItem::Command,
-                                   qt_("No Document Open!"),
-                                   FuncRequest(LFUN_NOACTION)));
+       if (!bv)
                return;
-       }
 
        Inset const * inset = bv->cursor().nextInset();
        if (!inset || inset->lyxCode() != CITE_CODE) {
@@ -1164,6 +1137,7 @@
                else if (m->kind() == MenuItem::Submenu) {
                        QMenu * subMenu = qMenu.addMenu(label(*m));
                        populate(*subMenu, m->submenu());
+                       subMenu->setEnabled(m->status().enabled());
                } else {
                        // we have a MenuItem::Command
                        qMenu.addAction(new Action(view, QIcon(), label(*m), 

Reply via email to