Fix bugs 1720 (almost) and 2877

* src/funcrequest.h: split UI enum into MENU and TOOLBAR

	* src/lyxfunc.C (getStatus): disable menu entries that need a
	buffer when window does not have focus (bug 1720)
	(dispatch, sendDispatchMessage): properly redraw toolbar after each 
	action (bug 2877).

	* src/frontends/Toolbars.C (layoutSelected):
	* src/MenuBackend.C (MenuItem):
	* src/ToolbarBackend.C (add): adapt to FuncRequest change.



git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15825 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2006-11-09 14:56:57 +00:00
parent a93279983d
commit 78aa7c6987
5 changed files with 12 additions and 17 deletions

View File

@ -107,7 +107,7 @@ MenuItem::MenuItem(Kind kind, docstring const & label,
FuncRequest const & func, bool optional)
: kind_(kind), label_(label), func_(func), optional_(optional)
{
func_.origin = FuncRequest::UI;
func_.origin = FuncRequest::MENU;
}

View File

@ -212,7 +212,7 @@ void ToolbarBackend::add(Toolbar & tb,
FuncRequest const & func, docstring const & tooltip)
{
tb.items.push_back(make_pair(func, tooltip));
tb.items.back().first.origin = FuncRequest::UI;
tb.items.back().first.origin = FuncRequest::TOOLBAR;
}

View File

@ -333,7 +333,7 @@ void layoutSelected(LyXView & lv, string const & name)
// Yes, the lyx::to_utf8(_()) is correct
if (lyx::to_utf8(_(itname)) == name) {
FuncRequest const func(LFUN_LAYOUT, itname,
FuncRequest::UI);
FuncRequest::TOOLBAR);
lv.dispatch(func);
return;
}

View File

@ -32,7 +32,8 @@ public:
/// Where the request came from
enum Origin {
INTERNAL,
UI, // The menu or the toolbar
MENU, // A menu entry
TOOLBAR, // A toolbar icon
KEYBOARD, // a keyboard binding
COMMANDBUFFER
};

View File

@ -377,7 +377,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
http://bugzilla.lyx.org/show_bug.cgi?id=1941#c4
*/
Buffer * buf;
if (cmd.origin == FuncRequest::UI && !lyx_view_->hasFocus())
if (cmd.origin == FuncRequest::MENU && !lyx_view_->hasFocus())
buf = 0;
else
buf = lyx_view_->buffer();
@ -1737,26 +1737,20 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
}
}
}
if (!quitting)
if (!quitting) {
lyx_view_->updateMenubar();
lyx_view_->updateToolbars();
// FIXME UNICODE: _() does not support anything but ascii.
// Do we need a to_ascii() method?
sendDispatchMessage(getMessage(), cmd);
}
}
void LyXFunc::sendDispatchMessage(docstring const & msg, FuncRequest const & cmd)
{
/* When an action did not originate from the UI/kbd, it makes
* sense to avoid updating the GUI. It turns out that this
* fixes bug 1941, for reasons that are described here:
* http://bugzilla.lyx.org/show_bug.cgi?id=1941#c4
*/
if (cmd.origin != FuncRequest::INTERNAL) {
lyx_view_->updateMenubar();
lyx_view_->updateToolbars();
}
const bool verbose = (cmd.origin == FuncRequest::UI
const bool verbose = (cmd.origin == FuncRequest::MENU
|| cmd.origin == FuncRequest::TOOLBAR
|| cmd.origin == FuncRequest::COMMANDBUFFER);
if (cmd.action == LFUN_SELF_INSERT || !verbose) {