From a938e098e528c9b669f17774f424ede6a44bf80b Mon Sep 17 00:00:00 2001 From: David Sparer Date: Tue, 20 Sep 2016 11:36:45 -0600 Subject: [PATCH] Added support for propogating child session collection changed events --- mRemoteV1/Config/Putty/PuttySessionsManager.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/mRemoteV1/Config/Putty/PuttySessionsManager.cs b/mRemoteV1/Config/Putty/PuttySessionsManager.cs index 5e0b53665..6510a26c8 100644 --- a/mRemoteV1/Config/Putty/PuttySessionsManager.cs +++ b/mRemoteV1/Config/Putty/PuttySessionsManager.cs @@ -61,21 +61,24 @@ namespace mRemoteNG.Config.Putty public void AddProvider(AbstractPuttySessionsProvider newProvider) { + if (_providers.Contains(newProvider)) return; _providers.Add(newProvider); + newProvider.PuttySessionsCollectionChanged += PuttySessionsCollectionChanged; RaiseSessionProvidersCollectionChangedEvent(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, newProvider)); } public void AddProviders(IEnumerable newProviders) { - _providers.AddRange(newProviders); - RaiseSessionProvidersCollectionChangedEvent(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, newProviders)); + foreach (var provider in newProviders) + AddProvider(provider); } public void RemoveProvider(AbstractPuttySessionsProvider providerToRemove) { - var wasRemoved = _providers.Remove(providerToRemove); - if (wasRemoved) - RaiseSessionProvidersCollectionChangedEvent(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, providerToRemove)); + if (!_providers.Contains(providerToRemove)) return; + _providers.Remove(providerToRemove); + providerToRemove.PuttySessionsCollectionChanged -= PuttySessionsCollectionChanged; + RaiseSessionProvidersCollectionChangedEvent(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, providerToRemove)); } public void PuttySessionChanged(object sender, PuttySessionChangedEventArgs e)