From 91a5263d681c60544501bd402b8c5c215ea071bd Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Wed, 8 Aug 2018 15:05:58 +0200 Subject: [PATCH] Extend list of accessible menu info When searching for and item in the menu, also try to consider those that require a BufferView (such as View/Update formats). Also, be explicit for the default format in order to find it. Fixes: #9851 --- src/frontends/Application.h | 2 ++ src/frontends/qt4/GuiApplication.cpp | 11 ++++++++++- src/frontends/qt4/GuiApplication.h | 1 + src/frontends/qt4/Menus.cpp | 6 +++--- src/frontends/qt4/Menus.h | 3 ++- src/insets/InsetInfo.cpp | 5 +++-- 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/frontends/Application.h b/src/frontends/Application.h index c0ea5c31ae..cf82776039 100644 --- a/src/frontends/Application.h +++ b/src/frontends/Application.h @@ -233,6 +233,8 @@ public: virtual bool searchMenu(FuncRequest const & func, docstring_list & names) const = 0; + virtual bool hasBufferView() const = 0; + /// \return the icon file name for the given action. static docstring iconName(FuncRequest const & f, bool unknown); /// \return the math icon name for the given command. diff --git a/src/frontends/qt4/GuiApplication.cpp b/src/frontends/qt4/GuiApplication.cpp index 4d20b0558a..d4b1701758 100644 --- a/src/frontends/qt4/GuiApplication.cpp +++ b/src/frontends/qt4/GuiApplication.cpp @@ -2935,7 +2935,16 @@ Buffer const * GuiApplication::updateInset(Inset const * inset) const bool GuiApplication::searchMenu(FuncRequest const & func, docstring_list & names) const { - return d->menus_.searchMenu(func, names); + BufferView * bv = 0; + if (current_view_) + bv = current_view_->currentBufferView(); + return d->menus_.searchMenu(func, names, bv); +} + + +bool GuiApplication::hasBufferView() const +{ + return (current_view_ && current_view_->currentBufferView()); } diff --git a/src/frontends/qt4/GuiApplication.h b/src/frontends/qt4/GuiApplication.h index fafdd46eea..bc16fabdce 100644 --- a/src/frontends/qt4/GuiApplication.h +++ b/src/frontends/qt4/GuiApplication.h @@ -76,6 +76,7 @@ public: void registerSocketCallback(int fd, SocketCallback func); void unregisterSocketCallback(int fd); bool searchMenu(FuncRequest const & func, docstring_list & names) const; + bool hasBufferView() const; void handleKeyFunc(FuncCode action); bool unhide(Buffer * buf); //override //@} diff --git a/src/frontends/qt4/Menus.cpp b/src/frontends/qt4/Menus.cpp index 686081789e..b9450a2857 100644 --- a/src/frontends/qt4/Menus.cpp +++ b/src/frontends/qt4/Menus.cpp @@ -1131,7 +1131,7 @@ void MenuDefinition::expandFormats(MenuItem::Kind const kind, Buffer const * buf docstring lbl = (kind == MenuItem::ViewFormats ? bformat(_("View [%1$s]|V"), label) : bformat(_("Update [%1$s]|U"), label)); - add(MenuItem(MenuItem::Command, toqstr(lbl), FuncRequest(action))); + add(MenuItem(MenuItem::Command, toqstr(lbl), FuncRequest(action, f->name()))); continue; } break; @@ -2540,10 +2540,10 @@ void Menus::read(Lexer & lex) bool Menus::searchMenu(FuncRequest const & func, - docstring_list & names) const + docstring_list & names, BufferView const * bv) const { MenuDefinition menu; - d->expand(d->menubar_, menu, 0); + d->expand(d->menubar_, menu, bv); return menu.searchMenu(func, names); } diff --git a/src/frontends/qt4/Menus.h b/src/frontends/qt4/Menus.h index 9bc78e3480..5df59ddf5d 100644 --- a/src/frontends/qt4/Menus.h +++ b/src/frontends/qt4/Menus.h @@ -14,6 +14,7 @@ #define MENUS_H #include +#include "BufferView.h" class QString; class QMenuBar; @@ -70,7 +71,7 @@ public: /// bool searchMenu(FuncRequest const & func, - docstring_list & names) const; + docstring_list & names, BufferView const * bv = 0) const; /// void fillMenuBar(QMenuBar * qmb, GuiView * view, bool initial = false); diff --git a/src/insets/InsetInfo.cpp b/src/insets/InsetInfo.cpp index 8b504a6522..e959836dd3 100644 --- a/src/insets/InsetInfo.cpp +++ b/src/insets/InsetInfo.cpp @@ -827,8 +827,6 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype) { // only need to do this once. if (initialized_) break; - // and we will not keep trying if we fail - initialized_ = true; docstring_list names; FuncRequest const func = lyxaction.lookupFunc(params_.name); if (func.action() == LFUN_UNKNOWN_ACTION) { @@ -840,8 +838,11 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype) { if (!theApp()) { gui = _("Can't determine menu entry for action %1$s in batch mode"); error(from_ascii("Can't determine menu entry for action %1$s in batch mode"), params_.lang); + initialized_ = true; break; } + // and we will not keep trying if we fail + initialized_ = theApp()->hasBufferView(); if (!theApp()->searchMenu(func, names)) { gui = _("No menu entry for action %1$s"); error(from_ascii("No menu entry for action %1$s"), params_.lang); -- 2.39.2