diff --git a/plugins/builtin/include/content/text_highlighting/pattern_language.hpp b/plugins/builtin/include/content/text_highlighting/pattern_language.hpp index e91b76ca8..82b6c0c66 100644 --- a/plugins/builtin/include/content/text_highlighting/pattern_language.hpp +++ b/plugins/builtin/include/content/text_highlighting/pattern_language.hpp @@ -152,6 +152,12 @@ namespace hex::plugin::builtin { }; std::atomic m_needsToUpdateColors = true; std::atomic m_wasInterrupted = false; + std::atomic m_interrupt = false; + + + void interrupt() { + m_interrupt = true; + } TextHighlighter(ViewPatternEditor *viewPatternEditor, std::unique_ptr *patternLanguage ) : m_viewPatternEditor(viewPatternEditor), patternLanguage(patternLanguage), m_needsToUpdateColors(true) {} @@ -315,6 +321,10 @@ namespace hex::plugin::builtin { } void next(i32 count = 1) { + if (m_interrupt) { + m_interrupt = false; + throw std::out_of_range("Highlights were deliberately interrupted"); + } if (count == 0) return; i32 id = getTokenId(m_curr->location); diff --git a/plugins/builtin/source/content/views/view_pattern_editor.cpp b/plugins/builtin/source/content/views/view_pattern_editor.cpp index b105a8bfe..5bf38ae69 100644 --- a/plugins/builtin/source/content/views/view_pattern_editor.cpp +++ b/plugins/builtin/source/content/views/view_pattern_editor.cpp @@ -578,7 +578,7 @@ namespace hex::plugin::builtin { m_changesWereParsed = false; taskHolder = TaskManager::createBackgroundTask("HighlightSourceCode", [this](auto &) { m_textHighlighter.highlightSourceCode(); }); } else { - taskHolder.interrupt(); + m_textHighlighter.interrupt(); } } }