Vanilla Bartender4 assumes only DRUID/WARRIOR/WARLOCK/PRIEST/ROGUE/HERO have
shapeshift forms. CoA custom classes (Witchdoctor, Templar, …) can register
forms late at runtime and aren't in the whitelist, so the stance/state bar
never came up for them.
StanceBar.lua:
- ApplyConfig() no longer Disable()s the module when GetNumShapeshiftForms()
is 0 at config time. A disabled module never re-enables on
UPDATE_SHAPESHIFT_FORMS, so late-registered forms were lost. We now just
hide the bar frame.
- Register UPDATE_SHAPESHIFT_FORMS and PLAYER_ENTERING_WORLD on the module
itself and re-Enable() / show the bar when forms appear after the fact.
Options/Bar.lua:
- The 'Hide in Stance/Form' visibility option was gated by a hard-coded
stanceClasses whitelist. Add an OR-fallback on GetNumShapeshiftForms() > 0
so CoA classes with forms get the UI.
StateBar.lua:
- DefaultStanceMap only had vanilla entries. For unknown classes with live
forms, synthesise a generic { id="formN", index=N } map at runtime so
UpdateStates() can wire stance-based action bar swaps.
Both MultiCastBar.lua and Options/MultiCastBar.lua hard-coded a class-mask
gate of SHAMAN|HERO, which doesn't know about CoA custom classes. As a
result, Witchdoctor (and any other CoA class the engine produces a totem
bar for) never had Bartender's wrapper module register, leaving the totem
bar un-skinned / un-configurable.
Keep the original mask check as the fast path, but fall through and load
the module when MultiCastActionBarFrame already exists — the engine only
creates that frame for classes that actually use the totem bar, so it's a
reliable class-agnostic test.
Re-sync after coa-ace3 d422ad3 which converted 42 numeric FileDataIDs in
Set*Texture() calls back to string paths. Upstream Ace3 uses FDIDs which
silently fail on WoW 3.3.5 / CoA, rendering color swatches, checkboxes
and window chrome as solid-red placeholders.