]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/Menubar_pimpl.C
fix disabling of submenu items
[lyx.git] / src / frontends / xforms / Menubar_pimpl.C
index b452a101612cfe63a825a4d741687d356ca90933..e4d261a39e8527cb112bc59ea0a5c1b9fa410ed1 100644 (file)
 #include "Dialogs.h"
 #include "XFormsView.h"
 #include "lyxfunc.h"
-#include "FloatList.h"
 #include "support/lstrings.h"
 #include "support/LAssert.h"
 #include "gettext.h"
 #include "debug.h"
-#include "toc.h"
 #include FORMS_H_LOCATION
 
 #include <boost/scoped_ptr.hpp>
@@ -40,7 +38,6 @@ using std::for_each;
 typedef vector<int>::size_type size_type;
 
 extern boost::scoped_ptr<kb_keymap> toplevel_keymap;
-extern LyXAction lyxaction;
 
 namespace {
 
@@ -200,7 +197,8 @@ string const fixlabel(string const & str)
 
 
 int Menubar::Pimpl::create_submenu(Window win, XFormsView * view,
-                                  Menu const & menu, vector<int> & smn)
+                                  Menu const & menu, vector<int> & smn,
+                                  bool & all_disabled)
 {
        const int menuid = get_new_submenu(smn, win);
        lyxerr[Debug::GUI] << "Menubar::Pimpl::create_submenu: creating "
@@ -239,6 +237,7 @@ int Menubar::Pimpl::create_submenu(Window win, XFormsView * view,
 
        it = extra_labels.begin();
        size_type count = 0;
+       all_disabled = true;
        int curmenuid = menuid;
        for (Menu::const_iterator i = menu.begin(); i != end; ++i, ++it) {
                MenuItem const & item = (*i);
@@ -295,6 +294,8 @@ int Menubar::Pimpl::create_submenu(Window win, XFormsView * view,
                                pupmode += "%b";
                        if (flag.disabled() || flag.unknown())
                                pupmode += "%i";
+                       else
+                               all_disabled = false;
                        label += pupmode;
 
                        // Finally the menu shortcut
@@ -318,12 +319,17 @@ int Menubar::Pimpl::create_submenu(Window win, XFormsView * view,
                }
 
                case MenuItem::Submenu: {
+                       bool sub_all_disabled;
                        int submenuid = create_submenu(win, view,
-                                                      *item.submenu(), smn);
+                                                      *item.submenu(), smn,
+                                                      sub_all_disabled);
+                       all_disabled &= sub_all_disabled;
                        if (submenuid == -1)
                                return -1;
                        string label = fixlabel(item.label());
                        label += extra_label + "%m";
+                       if (sub_all_disabled)
+                               label += "%i";
                        string shortcut = item.shortcut();
                        if (!shortcut.empty()) {
                                shortcut += lowercase(shortcut[0]);
@@ -377,8 +383,10 @@ void Menubar::Pimpl::MenuCallback(FL_OBJECT * ob, long button)
        Menu const frommenu = menubackend_->getMenu(item->submenuname());
        menubackend_->expand(frommenu, tomenu, view->buffer());
        vector<int> submenus;
+       bool all_disabled = true;
        int menu = iteminfo->pimpl_->
-               create_submenu(FL_ObjWin(ob), view, tomenu, submenus);
+               create_submenu(FL_ObjWin(ob), view, tomenu,
+                              submenus, all_disabled);
        if (menu != -1) {
                // place popup
                fl_setpup_position(view->getForm()->x + ob->x,