From da548dbe30ef0d36a2fb8ec6c05facb45d7f8ee7 Mon Sep 17 00:00:00 2001 From: Stephan Witt Date: Fri, 8 May 2015 19:09:00 +0200 Subject: [PATCH] #1720 disable document buffer related LFUNs in GUI view if the work area has no focus --- src/frontends/qt4/GuiView.cpp | 20 ++++++++++++++++++++ src/frontends/qt4/GuiView.h | 1 + 2 files changed, 21 insertions(+) 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); -- 2.39.2