]> git.lyx.org Git - features.git/blobdiff - src/frontends/qt4/Menus.cpp
Fix bug #5414: Show context menu accelerators when the context menu is shown after...
[features.git] / src / frontends / qt4 / Menus.cpp
index 598486adc373ef73e15688ca3dbd8b400a598654..52305e290c4cf9e61418fe27d2e6dffb70ec9b41 100644 (file)
@@ -71,6 +71,7 @@
 #include <QList>
 #include <QMenuBar>
 #include <QString>
+#include <QProxyStyle>
 
 #include "support/shared_ptr.h"
 
@@ -1569,19 +1570,36 @@ void Menu::Impl::populate(QMenu & qMenu, MenuDefinition const & menu)
        }
 }
 
+#ifdef Q_WS_WIN
+class AlwaysMnemonicStyle : public QProxyStyle {
+public:
+       int styleHint(StyleHint hint, const QStyleOption *opt = 0, const QWidget *widget = 0,
+               QStyleHintReturn *returnData = 0) const 
+       {
+               if (hint == QStyle::SH_UnderlineShortcut)
+                       return 1;
+               return QProxyStyle::styleHint(hint, opt, widget, returnData);
+       }
+};
+#endif
+
 /////////////////////////////////////////////////////////////////////
 // Menu implementation
 /////////////////////////////////////////////////////////////////////
 
-Menu::Menu(GuiView * gv, QString const & name, bool top_level)
+Menu::Menu(GuiView * gv, QString const & name, bool top_level, bool keyboard)
 : QMenu(gv), d(new Menu::Impl)
 {
+#ifdef Q_WS_WIN
+       if (keyboard)
+               setStyle(new AlwaysMnemonicStyle);
+#endif
        d->top_level_menu = top_level? new MenuDefinition : 0;
        d->view = gv;
        d->name = name;
        setTitle(name);
        if (d->top_level_menu)
-               connect(this, SIGNAL(aboutToShow()), this, SLOT(updateView()));
+               connect(this, SIGNAL(aboutToShow()), this, SLOT(updateView())); 
 }
 
 
@@ -2062,7 +2080,7 @@ void Menus::updateMenu(Menu * qmenu)
 }
 
 
-Menu * Menus::menu(QString const & name, GuiView & view)
+Menu * Menus::menu(QString const & name, GuiView & view, bool keyboard)
 {
        LYXERR(Debug::GUI, "Context menu requested: " << name);
        Menu * menu = d->name_map_[&view].value(name, 0);
@@ -2071,7 +2089,7 @@ Menu * Menus::menu(QString const & name, GuiView & view)
                return 0;
        }
 
-       menu = new Menu(&view, name, true);
+       menu = new Menu(&view, name, true, keyboard);
        d->name_map_[&view][name] = menu;
        return menu;
 }