backport r30557 (bug #1720)

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_6_X@30900 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2009-08-07 13:38:27 +00:00
parent 39ba733bc1
commit 750d6b6a52
4 changed files with 23 additions and 14 deletions

View File

@ -397,7 +397,22 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
//lyxerr << "LyXFunc::getStatus: cmd: " << cmd << endl; //lyxerr << "LyXFunc::getStatus: cmd: " << cmd << endl;
FuncStatus flag; FuncStatus flag;
Buffer * buf = lyx_view_ ? lyx_view_->buffer() : 0; /* In LyX/Mac, when a dialog is open, the menus of the
application can still be accessed without giving focus to
the main window. In this case, we want to disable the menu
entries that are buffer or view-related.
If this code is moved somewhere else (like in
GuiView::getStatus), then several functions will not be
handled correctly.
*/
frontend::LyXView * lv = 0;
Buffer * buf = 0;
if (lyx_view_
&& (cmd.origin != FuncRequest::MENU || lyx_view_->hasFocus())) {
lv = lyx_view_;
buf = lyx_view_->buffer();
}
if (cmd.action == LFUN_NOACTION) { if (cmd.action == LFUN_NOACTION) {
flag.message(from_utf8(N_("Nothing to do"))); flag.message(from_utf8(N_("Nothing to do")));
@ -648,11 +663,11 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
break; break;
// Does the view know something? // Does the view know something?
if (!lyx_view_) { if (!lv) {
enable = false; enable = false;
break; break;
} }
if (lyx_view_->getStatus(cmd, flag)) if (lv->getStatus(cmd, flag))
break; break;
// If we have a BufferView, try cursor position and // If we have a BufferView, try cursor position and

View File

@ -66,6 +66,8 @@ public:
virtual void setBuffer(Buffer * b) = 0; ///< \c Buffer to set. virtual void setBuffer(Buffer * b) = 0; ///< \c Buffer to set.
/// ///
virtual bool closeBuffer() = 0; virtual bool closeBuffer() = 0;
///
virtual bool hasFocus() const = 0;
/// load a document into the current workarea. /// load a document into the current workarea.
virtual Buffer * loadDocument( virtual Buffer * loadDocument(

View File

@ -1154,17 +1154,6 @@ bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
bool enable = true; bool enable = true;
Buffer * buf = buffer(); Buffer * buf = buffer();
/* In LyX/Mac, when a dialog is open, the menus of the
application can still be accessed without giving focus to
the main window. In this case, we want to disable the menu
entries that are buffer-related.
Note that this code is not perfect, as bug 1941 attests:
http://bugzilla.lyx.org/show_bug.cgi?id=1941#c4
*/
if (cmd.origin == FuncRequest::MENU && !hasFocus())
buf = 0;
switch(cmd.action) { switch(cmd.action) {
case LFUN_BUFFER_WRITE: case LFUN_BUFFER_WRITE:
enable = buf && (buf->isUnnamed() || !buf->isClean()); enable = buf && (buf->isUnnamed() || !buf->isClean());

View File

@ -301,6 +301,9 @@ What's new
- Fix bug where multimedia keys were intercepted by LyX (bug 6043). - Fix bug where multimedia keys were intercepted by LyX (bug 6043).
- Disable some menu entries when the document windows does not have
focus on OS X (bug 1720).
* DOCUMENTATION AND LOCALIZATION * DOCUMENTATION AND LOCALIZATION