Repository navigation
v2026.4.10.1
·
4 commits
to main
since this release
HeadsUpCDM
v2026.4.10.1 (2026-04-10)
Full Changelog Previous Releases
- feat: real ActionButton reparenting via SecureHandler (#10)
- feat: add bar/slot fields to actionbar spell entries
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - feat: add bar-to-button mapping and resolver
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - feat: SecureHandler setup for ActionButton reparenting
Replace static icon creation with SecureHandler restricted code that
reparents real Blizzard ActionButtons to HUD row frames. Falls back
to static icons if the button global is missing.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - feat: teardown restores ActionButtons via SecureHandler
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - fix: reparent ActionButton to UIParent, anchor relative to row
Option A (SetParent to plain row frame) confirmed not working in-game.
Try B1: reparent button to UIParent in restricted code, but SetPoint
relative to our row frame. Button is child of UIParent (always visible)
and positioned at the row's screen location.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - fix: use absolute UIParent offsets for ActionButton positioning (Option B2)
Options A and B1 confirmed not working in-game: restricted code cannot
anchor to non-secure frame refs. Now computing absolute screen position
of each row via GetLeft/GetTop, passing as pipe-delimited attribute,
and anchoring to UIParent with BOTTOMLEFT offsets in restricted code.
Matches EllesmereUI's proven pattern.
Handler trigger is deferred via C_Timer.After(0) so row positions are
finalized by ArrangeColumns before we read them.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - fix: create SecureHandler at file-load time for explicit protection
Runtime-created SecureHandler frames cannot execute protected operations
on Blizzard ActionButtons in WoW 12.0. The handler must be created at
file-load time (before PLAYER_LOGIN) to be "explicitly protected".
Changed to match EllesmereUI's exact pattern:
- Single handler created at file scope (not inside CreateActionColumn)
- SecureHandlerAttributeTemplate (not Base)
- SetAttributeNoHandler for snippet installation
- Indexed frame refs (btn-N, orig-N) and layout attributes (layout-N)
- Triggered via do-setup / do-restore attributes
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
- fix: compensate for button scale in position calculation
SetScale affects anchor coordinate interpretation — WoW multiplies
SetPoint offsets by the frame's scale. Divide position by scale before
encoding so the final screen position matches the row location.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - fix: don't apply HUD scale to real ActionButtons
SetScale on an ActionButton interacts with SetPoint offsets in the
restricted code, causing position drift that's hard to compensate for.
Leave real ActionButtons at native scale (48x48, scale 1.0). The HUD
scale slider still applies to the column layout and fallback icons.
If consistent sizing across the HUD becomes important, we can revisit
this trade-off.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - feat: remove HUD scale option, re-anchor buttons on drag
- Remove scale slider from options panel and per-column scale defaults
- Remove SetScale calls from ActionColumn, BuffIcons, Layout (alpha only)
- Re-trigger TriggerActionBarHandlers in OnDragStop so real ActionButtons
follow the HUD when it's repositioned in unlock mode - Update tests to reflect alpha-only column settings
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
- fix: don't force-show buff icons on reanchor
Blizzard's CDM manages buff icon visibility based on actual buff state.
Calling frame:Show() unconditionally in ReanchorBuffIcons overrode those
decisions, causing inactive buffs (e.g. Bulletstorm, Moonlight Chakram)
to display at full opacity. Remove the Show call — our job is only to
reposition, not to control visibility.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com - chore: address review feedback
Fixes three real bugs flagged by Claude in the PR review:
- Stale layout-i attributes in TriggerActionBarHandlers: the old
code only wrote layout-i when row coordinates were valid, leaving
stale values from prior triggers. Now always clear invalid slots
via SetAttribute(nil) so the restricted code'sif b and layout thenguard skips them cleanly. Also renamecountto
validCountfor clarity. - Combat-lockdown silent failure in DestroyActionColumn: firing
do-restore during combat is silently blocked because restricted
SetParent/SetPoint can't execute. Buttons would stay reparented to
UIParent until /reload. Now: set a pending flag, warn the user,
and flush from Core.lua's OnCombatDrop handler. Same pattern added
to TriggerActionBarHandlers for combat-lockdown re-trigger. - Persistent origParents cache: a deferred restore would target the
wrong parent if a new CreateActionColumn ran before the flush
(btn:GetParent() would be UIParent, not the real Blizzard bar).
File-level weak-keyed table captures the TRUE original parent the
first time we see each button and never overwrites it.
Also: clear btn-count in the restricted do-restore block so a stale
do-setup can't act on already-restored refs.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com
Co-authored-by: Claude Sonnet 4.6 noreply@anthropic.com - feat: add bar/slot fields to actionbar spell entries