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)