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.