commit c0a1893008bd13650d470afff16f56720b65c87c
Author: Juergen Spitzmueller <[email protected]>
Date:   Sat Feb 10 18:18:43 2018 +0100

    Disable CheckTeX while buffer is processed
    
    Since CheckTeX itself processes the tex file, a synchronous run with
    a TeX process can lead to all sorts of conflicts, including crashes.
    
    Fixes: #7434.
    (cherry picked from commit 71fea6332667e1a9fe99c38624e4dcaf1129d6c5)
---
 lib/ui/stdmenus.inc           |    2 +-
 src/Buffer.cpp                |    8 --------
 src/frontends/qt4/GuiView.cpp |   18 ++++++++++++++++++
 3 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/lib/ui/stdmenus.inc b/lib/ui/stdmenus.inc
index 37c1067..d1f145c 100644
--- a/lib/ui/stdmenus.inc
+++ b/lib/ui/stdmenus.inc
@@ -594,7 +594,7 @@ Menuset
                Item "Spellchecker...|S" "dialog-show spellchecker"
                OptItem "Thesaurus...|T" "thesaurus-entry"
                Item "Statistics...|a" "statistics"
-               OptItem "Check TeX|h" "buffer-chktex"
+               Item "Check TeX|h" "buffer-chktex"
                Item "TeX Information|I" "dialog-show texinfo"
                Item "Compare...|C" "dialog-show compare"
                Separator
diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index cd49a68..a8d1b2b 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -2567,10 +2567,6 @@ bool Buffer::getStatus(FuncRequest const & cmd, 
FuncStatus & flag)
                break;
        }
 
-       case LFUN_BUFFER_CHKTEX:
-               enable = params().isLatex() && !lyxrc.chktex_command.empty();
-               break;
-
        case LFUN_BUILD_PROGRAM:
                enable = params().isExportable("program", false);
                break;
@@ -2682,10 +2678,6 @@ void Buffer::dispatch(FuncRequest const & func, 
DispatchResult & dr)
                break;
        }
 
-       case LFUN_BUFFER_CHKTEX:
-               runChktex();
-               break;
-
        case LFUN_BUFFER_EXPORT_CUSTOM: {
                string format_name;
                string command = split(argument, format_name, ' ');
diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp
index e511cd6..87260cb 100644
--- a/src/frontends/qt4/GuiView.cpp
+++ b/src/frontends/qt4/GuiView.cpp
@@ -1941,6 +1941,19 @@ bool GuiView::getStatus(FuncRequest const & cmd, 
FuncStatus & flag)
                enable = theBufferList().last() != theBufferList().first();
                break;
 
+       case LFUN_BUFFER_CHKTEX: {
+               if (!doc_buffer || !doc_buffer->params().isLatex()
+                   || d.processing_thread_watcher_.isRunning()) {
+                       // grey out, don't hide
+                       enable = false;
+                       break;
+               }
+               // hide if we have no checktex command
+               enable = !lyxrc.chktex_command.empty();
+               flag.setUnknown(!enable);
+               break;
+       }
+
        case LFUN_VIEW_SPLIT:
                if (cmd.getArg(0) == "vertical")
                        enable = doc_buffer && (d.splitter_->count() == 1 ||
@@ -3800,6 +3813,11 @@ void GuiView::dispatch(FuncRequest const & cmd, 
DispatchResult & dr)
                        gotoNextOrPreviousBuffer(PREVBUFFER, true);
                        break;
 
+               case LFUN_BUFFER_CHKTEX:
+                       LASSERT(doc_buffer, break);
+                       doc_buffer->runChktex();
+                       break;
+
                case LFUN_COMMAND_EXECUTE: {
                        command_execute_ = true;
                        minibuffer_focus_ = true;

Reply via email to