diff --git a/main/gui/source/window/window.cpp b/main/gui/source/window/window.cpp index f97fffa0a..4f244006e 100644 --- a/main/gui/source/window/window.cpp +++ b/main/gui/source/window/window.cpp @@ -1093,6 +1093,7 @@ namespace hex { ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplGlfw_Shutdown(); + ImNodes::DestroyContext(); ImPlot3D::DestroyContext(); ImPlot::DestroyContext(); ImGui::DestroyContext(); diff --git a/plugins/builtin/include/content/views/view_data_processor.hpp b/plugins/builtin/include/content/views/view_data_processor.hpp index 08225f8f6..fea747c21 100644 --- a/plugins/builtin/include/content/views/view_data_processor.hpp +++ b/plugins/builtin/include/content/views/view_data_processor.hpp @@ -25,7 +25,10 @@ namespace hex::plugin::builtin { ctx->AttributeFlagStack = GImNodes->AttributeFlagStack; return ctx; - }(), ImNodes::DestroyContext }; + }(), [](ImNodesContext *ptr) { + if (ptr != nullptr) + ImNodes::DestroyContext(ptr); + } }; std::list> nodes; std::list endNodes; diff --git a/plugins/builtin/source/content/views/view_data_processor.cpp b/plugins/builtin/source/content/views/view_data_processor.cpp index 549709be4..acc326538 100644 --- a/plugins/builtin/source/content/views/view_data_processor.cpp +++ b/plugins/builtin/source/content/views/view_data_processor.cpp @@ -887,7 +887,9 @@ namespace hex::plugin::builtin { bool popWorkspace = false; // Set the ImNodes context to the current workspace context + auto prevContext = ImNodes::GetCurrentContext(); ImNodes::SetCurrentContext(workspace.context.get()); + ON_SCOPE_EXIT { ImNodes::SetCurrentContext(prevContext); }; this->drawContextMenus(workspace);