diff --git a/MatterControlLib/PartPreviewWindow/MainViewWidget.cs b/MatterControlLib/PartPreviewWindow/MainViewWidget.cs index a52b71642..1f6c094b3 100644 --- a/MatterControlLib/PartPreviewWindow/MainViewWidget.cs +++ b/MatterControlLib/PartPreviewWindow/MainViewWidget.cs @@ -545,15 +545,23 @@ namespace MatterHackers.MatterControl.PartPreviewWindow MinimumSize = new Vector2(120, theme.TabButtonHeight) }; - printerTab.CloseClicked += (s, e) => + void Tab_CloseClicked(object sender, EventArgs args) { ApplicationController.Instance.ClosePrinter(printer); - }; + } + void Widget_Closed(object sender, EventArgs args) + { + // Unregister listeners + printerTab.CloseClicked -= Tab_CloseClicked; + printerTab.Closed -= Widget_Closed; + printer.Settings.SettingChanged -= Printer_SettingChanged; + } + + // Register listeners printer.Settings.SettingChanged += Printer_SettingChanged; - - // Unregister listener on Tab close - printerTab.Closed += (s, e) => printer.Settings.SettingChanged -= Printer_SettingChanged; + printerTab.CloseClicked += Tab_CloseClicked; + printerTab.Closed += Widget_Closed; // Add printer tab tabControl.AddTab(printerTab); @@ -609,10 +617,19 @@ namespace MatterHackers.MatterControl.PartPreviewWindow tabControl.AddTab(partTab); - partTab.CloseClicked += (s, e) => + void Tab_CloseClicked(object sender, EventArgs args) { ApplicationController.Instance.Workspaces.Remove(workspace); - }; + } + + void Widget_Closed(object sender, EventArgs args) + { + partTab.CloseClicked -= Tab_CloseClicked; + partTab.Closed -= Widget_Closed; + } + + partTab.CloseClicked += Tab_CloseClicked; + partTab.Closed += Widget_Closed; return partTab; } diff --git a/MatterControlLib/PartPreviewWindow/RunningTasksWidget.cs b/MatterControlLib/PartPreviewWindow/RunningTasksWidget.cs index 8fc92bdf9..7e9aeb066 100644 --- a/MatterControlLib/PartPreviewWindow/RunningTasksWidget.cs +++ b/MatterControlLib/PartPreviewWindow/RunningTasksWidget.cs @@ -27,6 +27,7 @@ of the authors and should not be interpreted as representing official policies, either expressed or implied, of the FreeBSD Project. */ +using System; using System.Collections.Generic; using System.Linq; using MatterHackers.Agg; @@ -67,14 +68,23 @@ namespace MatterHackers.MatterControl.PartPreviewWindow }; this.AddChild(pendingTasksList); - var tasks = ApplicationController.Instance.Tasks; + // Register listeners + ApplicationController.Instance.Tasks.TasksChanged += this.Tasks_TasksChanged; - tasks.TasksChanged += (s, e) => - { - RenderRunningTasks(theme, tasks); - }; + this.RenderRunningTasks(theme, ApplicationController.Instance.Tasks); + } - RenderRunningTasks(theme, tasks); + private void Tasks_TasksChanged(object sender, EventArgs e) + { + this.RenderRunningTasks(theme, ApplicationController.Instance.Tasks); + } + + public override void OnClosed(EventArgs e) + { + // Unregister listeners + ApplicationController.Instance.Tasks.TasksChanged -= this.Tasks_TasksChanged; + + base.OnClosed(e); } private void RenderRunningTasks(ThemeConfig theme, RunningTasksConfig tasks) diff --git a/MatterControlLib/PartPreviewWindow/View3D/MeshViewerWidget.cs b/MatterControlLib/PartPreviewWindow/View3D/MeshViewerWidget.cs index 76830781f..f2d081378 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/MeshViewerWidget.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/MeshViewerWidget.cs @@ -66,6 +66,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow private readonly List drawables = new List(); private readonly List itemDrawables = new List(); + private bool emulatorHooked; private long lastEmulatorDrawMs; private readonly Mesh emulatorNozzleMesh = PlatonicSolids.CreateCube(1, 1, 10);