diff --git a/AetherBags/Nodes/Inventory/InventoryCategoryNode.cs b/AetherBags/Nodes/Inventory/InventoryCategoryNode.cs index 7b98096..74c5ca5 100644 --- a/AetherBags/Nodes/Inventory/InventoryCategoryNode.cs +++ b/AetherBags/Nodes/Inventory/InventoryCategoryNode.cs @@ -508,7 +508,44 @@ public class InventoryCategoryNode : InventoryCategoryNodeBase using (_itemGridNode.DeferRecalculateLayout()) { - _itemGridNode.Clear(); + ReturnItemsToPool(); + _itemGridNode.ClearListOnly(); + } + } + + private void ReturnItemsToPool() + { + var nodes = _itemGridNode.Nodes; + for (int i = 0; i < nodes.Count; i++) + { + if (nodes[i] is not InventoryDragDropNode itemNode) + continue; + + if (SharedItemPool != null) + { + if (!SharedItemPool.TryReturn(itemNode)) + { + try + { + itemNode.Dispose(); + } + catch (Exception ex) + { + Services.Logger.Error(ex, "[InventoryCategoryNode] Error disposing overflow item node"); + } + } + } + else + { + try + { + itemNode.Dispose(); + } + catch (Exception ex) + { + Services.Logger.Error(ex, "[InventoryCategoryNode] Error disposing item node (no pool)"); + } + } } } } diff --git a/AetherBags/Nodes/Layout/DeferrableLayoutListNode.cs b/AetherBags/Nodes/Layout/DeferrableLayoutListNode.cs index 520186a..beb5446 100644 --- a/AetherBags/Nodes/Layout/DeferrableLayoutListNode.cs +++ b/AetherBags/Nodes/Layout/DeferrableLayoutListNode.cs @@ -229,6 +229,21 @@ public abstract class DeferrableLayoutListNode : SimpleComponentNode RecalculateLayout(); } + public void ClearListOnly() + { + _suppressRecalculateLayout = true; + try + { + NodeList.Clear(); + } + finally + { + _suppressRecalculateLayout = false; + } + + RecalculateLayout(); + } + public delegate TU CreateNewNode(T data) where TU : NodeBase; public delegate T GetDataFromNode(TU node) where TU : NodeBase;