diff --git a/src/BizHawk.Client.EmuHawk/tools/ToolBox.cs b/src/BizHawk.Client.EmuHawk/tools/ToolBox.cs index 15938d8f38..ba1cfd4fde 100644 --- a/src/BizHawk.Client.EmuHawk/tools/ToolBox.cs +++ b/src/BizHawk.Client.EmuHawk/tools/ToolBox.cs @@ -59,21 +59,21 @@ namespace BizHawk.Client.EmuHawk foreach (var t in tools) { - var instance = Activator.CreateInstance(t); - + var wasLoaded = Tools.Has(t); + var instance = (Form) Tools.Load(t, focus: false); var tsb = new ToolStripButton { - Image = ((Form) instance).Icon.ToBitmap(), - Text = ((Form) instance).Text, - DisplayStyle = ((Form) instance).ShowIcon ? ToolStripItemDisplayStyle.Image : ToolStripItemDisplayStyle.Text + Image = instance.Icon.ToBitmap(), + Text = instance.Text, + DisplayStyle = instance.ShowIcon ? ToolStripItemDisplayStyle.Image : ToolStripItemDisplayStyle.Text }; - + if (!wasLoaded) instance.Dispose(); tsb.Click += (o, e) => { - Tools.Load(t); + if (wasLoaded) instance.Focus(); // instance refers to already opened tool, focus it + else Tools.Load(t); // instance was new and has been disposed by now Close(); }; - ToolBoxStrip.Items.Add(tsb); } } diff --git a/src/BizHawk.Client.EmuHawk/tools/ToolManager.cs b/src/BizHawk.Client.EmuHawk/tools/ToolManager.cs index 37363923f5..26deba23c4 100644 --- a/src/BizHawk.Client.EmuHawk/tools/ToolManager.cs +++ b/src/BizHawk.Client.EmuHawk/tools/ToolManager.cs @@ -487,6 +487,11 @@ namespace BizHawk.Client.EmuHawk return _tools.Any(t => t is T && t.IsActive); } + /// iff a tool of the given is active + public bool Has(Type toolType) + => typeof(IToolForm).IsAssignableFrom(toolType) + && _tools.Any(t => toolType.IsInstanceOfType(t) && t.IsActive); + /// /// Gets the instance of T, or creates and returns a new instance ///