From 71fea6332667e1a9fe99c38624e4dcaf1129d6c5 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. --- 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 57077ed4b8..1bed2393ae 100644 --- a/lib/ui/stdmenus.inc +++ b/lib/ui/stdmenus.inc @@ -595,7 +595,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 462094f960..f42233f60c 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -2528,10 +2528,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; @@ -2644,10 +2640,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 9086464ec8..7090c3c8ad 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -1931,6 +1931,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 || @@ -3794,6 +3807,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; -- 2.39.2