diff --git a/Dalamud/Game/AddonLifecycle/AddonLifecycle.cs b/Dalamud/Game/AddonLifecycle/AddonLifecycle.cs index c0094d11a..c0e817f0d 100644 --- a/Dalamud/Game/AddonLifecycle/AddonLifecycle.cs +++ b/Dalamud/Game/AddonLifecycle/AddonLifecycle.cs @@ -346,21 +346,17 @@ internal class AddonLifecyclePluginScoped : IDisposable, IServiceType, IAddonLif } /// - public void UnregisterListener(IAddonLifecycle.AddonEventDelegate handler, params IAddonLifecycle.AddonEventDelegate[] handlers) + public void UnregisterListener(params IAddonLifecycle.AddonEventDelegate[] handlers) { - foreach (var listener in this.eventListeners.Where(entry => entry.FunctionDelegate == handler).ToArray()) + foreach (var handler in handlers) { - this.addonLifecycleService.UnregisterListener(listener); - this.eventListeners.Remove(listener); - } - - foreach (var handlerParma in handlers) - { - foreach (var listener in this.eventListeners.Where(entry => entry.FunctionDelegate == handlerParma).ToArray()) + this.eventListeners.RemoveAll(entry => { - this.addonLifecycleService.UnregisterListener(listener); - this.eventListeners.Remove(listener); - } + if (entry.FunctionDelegate != handler) return false; + + this.addonLifecycleService.UnregisterListener(entry); + return true; + }); } } } diff --git a/Dalamud/Plugin/Services/IAddonLifecycle.cs b/Dalamud/Plugin/Services/IAddonLifecycle.cs index 1e318ae79..cbb3d7c24 100644 --- a/Dalamud/Plugin/Services/IAddonLifecycle.cs +++ b/Dalamud/Plugin/Services/IAddonLifecycle.cs @@ -77,9 +77,8 @@ public interface IAddonLifecycle /// /// Unregister all events that use the specified handlers. /// - /// Event handler to remove. - /// Additional handlers to remove. - void UnregisterListener(AddonEventDelegate handler, params AddonEventDelegate[] handlers); + /// Handlers to remove. + void UnregisterListener(params AddonEventDelegate[] handlers); /// /// Addon argument data for use in event subscribers.