From 7f6b433d8ca47fd1477133cf0b118c0bc25e756b Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 23 Jan 2016 19:49:37 +0100 Subject: [PATCH] Only open 1 devtools per window. --- src/Perspex.Diagnostics/DevTools.paml.cs | 50 ++++++++++++++++++------ 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/src/Perspex.Diagnostics/DevTools.paml.cs b/src/Perspex.Diagnostics/DevTools.paml.cs index 8b607a496f..ab374f09f1 100644 --- a/src/Perspex.Diagnostics/DevTools.paml.cs +++ b/src/Perspex.Diagnostics/DevTools.paml.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Perspex.Controls; using Perspex.Controls.Templates; using Perspex.Diagnostics.ViewModels; @@ -11,12 +12,17 @@ namespace Perspex.Diagnostics { public class DevTools : UserControl { + private static Dictionary s_open = new Dictionary(); + public DevTools(IControl root) { - this.InitializeComponent(); - this.DataContext = new DevToolsViewModel(root); + InitializeComponent(); + Root = root; + DataContext = new DevToolsViewModel(root); } + public IControl Root { get; } + public static IDisposable Attach(Window window) { return window.AddHandler( @@ -29,21 +35,43 @@ namespace Perspex.Diagnostics { if (e.Key == Key.F12) { - Window window = new Window + var window = (Window)sender; + var devToolsWindow = default(Window); + + if (s_open.TryGetValue(window, out devToolsWindow)) + { + devToolsWindow.Activate(); + } + else { - Width = 1024, - Height = 512, - Content = new DevTools((IControl)sender), - DataTemplates = new DataTemplates + devToolsWindow = new Window { - new ViewLocator(), - } - }; + Width = 1024, + Height = 512, + Content = new DevTools(window), + DataTemplates = new DataTemplates + { + new ViewLocator(), + } + }; - window.Show(); + devToolsWindow.Closed += DevToolsClosed; + s_open.Add((Window)sender, devToolsWindow); + devToolsWindow.Show(); + } } } + private static void DevToolsClosed(object sender, EventArgs e) + { + var devToolsWindow = (Window)sender; + var devTools = (DevTools)devToolsWindow.Content; + var window = (Window)devTools.Root; + + s_open.Remove(window); + devToolsWindow.Closed -= DevToolsClosed; + } + private void InitializeComponent() { PerspexXamlLoader.Load(this);