diff --git a/Assets/Cryville/Crtr/Browsing/Actions/ActionManager.cs b/Assets/Cryville/Crtr/Browsing/Actions/ActionManager.cs index 19e5912..d3f58cf 100644 --- a/Assets/Cryville/Crtr/Browsing/Actions/ActionManager.cs +++ b/Assets/Cryville/Crtr/Browsing/Actions/ActionManager.cs @@ -5,6 +5,7 @@ using System.Linq; namespace Cryville.Crtr.Browsing.Actions { public class ActionManager { readonly Dictionary> _actions = new Dictionary>(); + readonly Dictionary _refCounts = new Dictionary(); public event Action Changed; @@ -23,6 +24,8 @@ namespace Cryville.Crtr.Browsing.Actions { int index = actions.BinarySearch(action, ActionPriorityComparer.Instance); if (index < 0) index = ~index; actions.Insert(index, action); + if (_refCounts.ContainsKey(action)) _refCounts[action]++; + else _refCounts[action] = 0; Changed?.Invoke(); } public void Register(IResourceAction action) { @@ -35,6 +38,7 @@ namespace Cryville.Crtr.Browsing.Actions { public void Unregister(Type type, IResourceAction action) { List actions; if (!_actions.TryGetValue(type, out actions)) return; + if (--_refCounts[action] > 0) return; actions.Remove(action); Changed?.Invoke(); }