The pfActionBar frame ran an OnUpdate every frame and fully rebuilt all 140
buttons on events that only touch one part of them.
- Events go where the stock 1.12 bars send them: page and bonus-bar changes
to the main bar's pager only, UPDATE_BINDINGS to the keybind text only,
combat, auto repeat and tradeskill events to the active-border pass, and
aura/form changes to the stance buttons that exist. Full rebuilds are left
for entering the world, slot changes and the drag grid.
- Keybind text is read once per binding change from a fixed per-button
command, no longer formatted and gsub'd on every slot update.
- Updates flush on the next frame through RunNextFrame instead of a 40 Hz
OnUpdate; range is polled on a C_Timer ticker only while glowrange is on.
- Passes check visibility once per bar and walk only its shown buttons; a bar
refreshes its buttons from OnShow, replacing the polled stale catch-up.
Range no longer checks the buttons of disabled bars.
- Cooldowns skip CooldownFrame_SetTimer when start/duration/enable are
unchanged; the active border only touches widgets when its state changes,
and the "statechange" animation now follows every state change.
- PET_BAR_UPDATE only shows or hides the pet bar instead of re-running its
whole layout; unlock mode is hooked instead of polled.
- Stance and pet buttons no longer inherit the previous button's oom tint.
pfUI.bars.update is replaced by pfUI.bars.QueueSlot(slot).