- CategorizeItems() keeps each item's category unless something it was
based on changed (item, bag/slot, bag type, count, charges, stock
state, tooltip). A full pass runs on window open, forced resort,
rebuilt lookup tables, character switch and any non-bag event.
- ActiveQuestItems: raise BAGSHUI_ACTIVE_QUEST_ITEM_UPDATE only when the
quest item list or counts changed, not after every QUEST_LOG_UPDATE.
- Item buttons: OnUpdate is set on mouse enter and removes itself after
the mouse leaves; the base template OnUpdate is cleared. Stock badges
are refreshed once a minute from the window's OnUpdate.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019W3rwt5PZSpEDkXYzRuRhH
- Rules: collect rule function arguments with inline nil checks instead
of 50 BsUtil.TableInsertNonNil() calls per rule call. Profiling showed
this was the biggest single cost of re-categorizing on every bag change.
- Item click: queue the window update instead of running it immediately,
so it merges with the update from the bag/lock events that follow.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019W3rwt5PZSpEDkXYzRuRhH