From af55b309c49ab662ab649ddf331be1bfac9816d1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 19 Apr 2026 20:55:14 +0000 Subject: [PATCH 1/2] Initial plan From 59cedfa51ade958c12543d1725a9efd9f51f52d2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 19 Apr 2026 21:00:09 +0000 Subject: [PATCH 2/2] fix: guard volume event node ui teardown Agent-Logs-Url: https://github.com/TombEngine/Tomb-Editor/sessions/35465f2b-a4e7-4071-b0e1-12c07ddd6896 Co-authored-by: Nickelony <20436882+Nickelony@users.noreply.github.com> --- TombEditor/Controls/TriggerManager.cs | 4 ++++ .../VisualScripting/VisibleNodeBase.cs | 23 +++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/TombEditor/Controls/TriggerManager.cs b/TombEditor/Controls/TriggerManager.cs index 5205948e2c..d461211de8 100644 --- a/TombEditor/Controls/TriggerManager.cs +++ b/TombEditor/Controls/TriggerManager.cs @@ -69,6 +69,10 @@ obj is Editor.EventSetsChangedEvent || BeginInvoke((Action)(() => { _nodeListRefreshPending = false; + + if (IsDisposed || !IsHandleCreated || nodeEditor.IsDisposed) + return; + nodeEditor.PopulateCachedNodeLists(_editor.Level); nodeEditor.RefreshArgumentUI(); })); diff --git a/TombLib/TombLib.Forms/Controls/VisualScripting/VisibleNodeBase.cs b/TombLib/TombLib.Forms/Controls/VisualScripting/VisibleNodeBase.cs index 82f2d9163b..caeda1b8b7 100644 --- a/TombLib/TombLib.Forms/Controls/VisualScripting/VisibleNodeBase.cs +++ b/TombLib/TombLib.Forms/Controls/VisualScripting/VisibleNodeBase.cs @@ -162,19 +162,25 @@ public void SelectFirstFunction(ArgumentType type, string luaName) public void SpawnUIElements() { + if (IsDisposed || Disposing || Node == null) + return; + + var editor = Editor; var func = cbFunction.SelectedItem as NodeFunction; - if (func == null) + if (func == null || editor == null || editor.IsDisposed) return; Visible = false; - Editor.LockNodeChanges = true; + editor.LockNodeChanges = true; SuspendLayout(); DisposeUI(); var scale = 1.0f; - using (var gfx = FindForm().CreateGraphics()) - scale = (float)gfx.DpiX / 96.0f; + var form = FindForm(); + if (form != null && !form.IsDisposed) + using (var gfx = form.CreateGraphics()) + scale = (float)gfx.DpiX / 96.0f; Size = new Size((int)(Node.Size * scale), Size.Height); @@ -279,10 +285,10 @@ public void SpawnUIElements() RefreshLock(); ResumeLayout(); - Editor.LockNodeChanges = false; + editor.LockNodeChanges = false; Visible = true; Invalidate(); - Editor?.Invalidate(); + editor.Invalidate(); } private void Ctrl_LocatedItemFound(object sender, EventArgs e) @@ -683,6 +689,9 @@ private void cbFunction_SelectedIndexChanged(object sender, EventArgs e) return; var funcSetup = cbFunction.SelectedItem as NodeFunction; + if (funcSetup == null || Node == null || IsDisposed || Disposing) + return; + Node.Function = funcSetup.Signature; if ((_lastSelectedIndex != -1 && cbFunction.SelectedIndex != -1) || (funcSetup.Arguments.Count != Node.Arguments.Count)) @@ -700,4 +709,4 @@ private void cbFunction_MouseDown(object sender, MouseEventArgs e) Ctrl_RightClick(sender, e); } } -} \ No newline at end of file +}