diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index a520b4eb54..52fadcf3ef 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -841,6 +841,16 @@ void GuiView::setFocus() } +bool GuiView::hasFocus() const +{ + if (currentWorkArea()) + return currentWorkArea()->hasFocus(); + if (currentMainWorkArea()) + return currentMainWorkArea()->hasFocus(); + return d.bg_widget_->hasFocus(); +} + + void GuiView::focusInEvent(QFocusEvent * e) { LYXERR(Debug::DEBUG, "GuiView::focusInEvent()" << this); @@ -1699,6 +1709,16 @@ bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag) Buffer * doc_buffer = documentBufferView() ? &(documentBufferView()->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-related. + */ + if (cmd.origin() == FuncRequest::MENU && !hasFocus()) { + buf = 0; + doc_buffer = 0; + } + // Check whether we need a buffer if (!lyxaction.funcHasFlag(cmd.action(), LyXAction::NoBuffer) && !buf) { // no, exit directly diff --git a/src/frontends/qt4/GuiView.h b/src/frontends/qt4/GuiView.h index 478e3a1917..43b9b988a5 100644 --- a/src/frontends/qt4/GuiView.h +++ b/src/frontends/qt4/GuiView.h @@ -123,6 +123,7 @@ public: /// void setFocus(); + bool hasFocus() const; /// void focusInEvent(QFocusEvent * e);