diff --git a/plugins/builtin/include/content/views/view_pattern_editor.hpp b/plugins/builtin/include/content/views/view_pattern_editor.hpp index 6d584844f9c4b..431459e82958c 100644 --- a/plugins/builtin/include/content/views/view_pattern_editor.hpp +++ b/plugins/builtin/include/content/views/view_pattern_editor.hpp @@ -179,6 +179,8 @@ namespace hex::plugin::builtin { std::atomic m_resetDebuggerVariables; int m_debuggerScopeIndex = 0; + std::chrono::steady_clock::time_point m_lastEditTime; + private: void drawConsole(ImVec2 size); void drawEnvVars(ImVec2 size, std::list &envVars); diff --git a/plugins/builtin/source/content/views/view_pattern_editor.cpp b/plugins/builtin/source/content/views/view_pattern_editor.cpp index f6ac325ac81b5..e0bc270d83d88 100644 --- a/plugins/builtin/source/content/views/view_pattern_editor.cpp +++ b/plugins/builtin/source/content/views/view_pattern_editor.cpp @@ -269,20 +269,25 @@ namespace hex::plugin::builtin { if (this->m_textEditor.IsTextChanged()) { this->m_hasUnevaluatedChanges = true; ImHexApi::Provider::markDirty(); + this->m_lastEditTime = std::chrono::steady_clock::now(); } if (this->m_hasUnevaluatedChanges && this->m_runningEvaluators == 0 && this->m_runningParsers == 0) { - this->m_hasUnevaluatedChanges = false; + auto now = std::chrono::steady_clock::now(); + auto timeSinceLastEdit = std::chrono::duration_cast(now - this->m_lastEditTime).count(); + if (timeSinceLastEdit > 500) { + this->m_hasUnevaluatedChanges = false; - auto code = this->m_textEditor.GetText(); - EventManager::post(code); + auto code = this->m_textEditor.GetText(); + EventManager::post(code); - TaskManager::createBackgroundTask("Pattern Parsing", [this, code, provider](auto &){ - this->parsePattern(code, provider); + TaskManager::createBackgroundTask("Pattern Parsing", [this, code, provider](auto &){ + this->parsePattern(code, provider); - if (this->m_runAutomatically) - this->m_triggerAutoEvaluate = true; - }); + if (this->m_runAutomatically) + this->m_triggerAutoEvaluate = true; + }); + } } if (this->m_triggerAutoEvaluate.exchange(false)) { @@ -1340,4 +1345,4 @@ namespace hex::plugin::builtin { }); } -} \ No newline at end of file +}