commit da548dbe30ef0d36a2fb8ec6c05facb45d7f8ee7
Author: Stephan Witt <[email protected]>
Date: Fri May 8 19:09:00 2015 +0200
#1720 disable document buffer related LFUNs in GUI view if the work area
has no focus
diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp
index a520b4e..52fadcf 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 478e3a1..43b9b98 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);