From 482de36876f672ec09afd73d916bc66ce93f7ff4 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Sat, 10 Feb 2018 18:18:43 +0100 Subject: [PATCH] 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 37c1067c98..d1f145c878 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 cd49a683d7..a8d1b2b718 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 e511cd6cf7..87260cb0d7 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;