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);

Reply via email to