Skip to content

Commit 698a094

Browse files
author
mergetest
committed
Merge PR #212: v5 release-review fix round (data integrity, stuck-state cleanup, removals, bug fixes)
2 parents 406b5d8 + 068b2f1 commit 698a094

24 files changed

Lines changed: 463 additions & 591 deletions

AuraDesigner/Options.lua

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3987,7 +3987,12 @@ local function BuildTypeContent(parent, typeKey, auraName, width, optProxy, yOff
39873987
g:AddWidget(GUI:CreateSlider(parent, L["Scale"], 0.5, 3.0, 0.05, proxy, "scale"), 54)
39883988
g:AddWidget(GUI:CreateSlider(parent, L["Alpha"], 0, 1, 0.05, proxy, "alpha"), 54)
39893989
g:AddWidget(GUI:CreateSlider(parent, L["Frame Level"], -10, 30, 1, proxy, "frameLevel"), 54)
3990-
g:AddWidget(GUI:CreateDropdown(parent, L["Frame Strata"], OPTS.FRAME_STRATA_OPTIONS, proxy, "frameStrata"), 54)
3990+
local strataDD = g:AddWidget(GUI:CreateDropdown(parent, L["Frame Strata"], OPTS.FRAME_STRATA_OPTIONS, proxy, "frameStrata"), 54)
3991+
-- 12.1: indicator z-order is engine-managed (fixed per-family level
3992+
-- offsets; Frame Level above IS applied). Strata isn't wired on the
3993+
-- container path yet — planned with the z-order polish pass.
3994+
GUI:BlockControl12_1(strataDD, "roadmap", { id = "ad:framestrata", page = L["Aura Designer"],
3995+
when = function() return DF.AuraContainer and DF.AuraContainer.IsSupported and DF.AuraContainer.IsSupported() end })
39913996
g:AddWidget(GUI:CreateCheckbox(parent, L["Hide Cooldown Swipe"], proxy, "hideSwipe"), 28)
39923997
-- Text-only mode: the icon TEXTURE is hidden, so a border (static OR
39933998
-- expiring) would frame nothing. Rebuild the page on toggle so the
@@ -4157,7 +4162,12 @@ local function BuildTypeContent(parent, typeKey, auraName, width, optProxy, yOff
41574162
g:AddWidget(GUI:CreateColorPicker(parent, L["Color"], proxy, "color", true, RPL, RPL, true), 28)
41584163
g:AddWidget(GUI:CreateSlider(parent, L["Alpha"], 0, 1, 0.05, proxy, "alpha"), 54)
41594164
g:AddWidget(GUI:CreateSlider(parent, L["Frame Level"], -10, 30, 1, proxy, "frameLevel"), 54)
4160-
g:AddWidget(GUI:CreateDropdown(parent, L["Frame Strata"], OPTS.FRAME_STRATA_OPTIONS, proxy, "frameStrata"), 54)
4165+
local strataDD = g:AddWidget(GUI:CreateDropdown(parent, L["Frame Strata"], OPTS.FRAME_STRATA_OPTIONS, proxy, "frameStrata"), 54)
4166+
-- 12.1: indicator z-order is engine-managed (fixed per-family level
4167+
-- offsets; Frame Level above IS applied). Strata isn't wired on the
4168+
-- container path yet — planned with the z-order polish pass.
4169+
GUI:BlockControl12_1(strataDD, "roadmap", { id = "ad:framestrata", page = L["Aura Designer"],
4170+
when = function() return DF.AuraContainer and DF.AuraContainer.IsSupported and DF.AuraContainer.IsSupported() end })
41614171
g:AddWidget(GUI:CreateCheckbox(parent, L["Hide Cooldown Swipe"], proxy, "hideSwipe"), 28)
41624172
g:AddWidget(GUI:CreateCheckbox(parent, L["Hide Icon (Text Only)"], proxy, "hideIcon"), 28)
41634173
g:AddWidget(GUI:CreateCheckbox(parent, L["Show When Missing"], proxy, "showWhenMissing", function()
@@ -4289,7 +4299,12 @@ local function BuildTypeContent(parent, typeKey, auraName, width, optProxy, yOff
42894299
g:AddWidget(GUI:CreateColorPicker(parent, L["Background Color"], proxy, "bgColor", true, RPL, RPL, true), 28)
42904300
g:AddWidget(GUI:CreateSlider(parent, L["Alpha"], 0, 1, 0.05, proxy, "alpha"), 54)
42914301
g:AddWidget(GUI:CreateSlider(parent, L["Frame Level"], -10, 30, 1, proxy, "frameLevel"), 54)
4292-
g:AddWidget(GUI:CreateDropdown(parent, L["Frame Strata"], OPTS.FRAME_STRATA_OPTIONS, proxy, "frameStrata"), 54)
4302+
local strataDD = g:AddWidget(GUI:CreateDropdown(parent, L["Frame Strata"], OPTS.FRAME_STRATA_OPTIONS, proxy, "frameStrata"), 54)
4303+
-- 12.1: indicator z-order is engine-managed (fixed per-family level
4304+
-- offsets; Frame Level above IS applied). Strata isn't wired on the
4305+
-- container path yet — planned with the z-order polish pass.
4306+
GUI:BlockControl12_1(strataDD, "roadmap", { id = "ad:framestrata", page = L["Aura Designer"],
4307+
when = function() return DF.AuraContainer and DF.AuraContainer.IsSupported and DF.AuraContainer.IsSupported() end })
42934308
end)
42944309
-- Border (Stage 5.3 — unified controls via CreateBorderControls).
42954310
-- Full toolkit (Style / Texture / Colour / Gradient / Shadow / Blend /
@@ -4408,7 +4423,11 @@ local function BuildTypeContent(parent, typeKey, auraName, width, optProxy, yOff
44084423
-- Draw order: lift this border above the frame's own class/role
44094424
-- border so it fully covers it (on by default). Off tucks it back
44104425
-- underneath the frame border (the pre-5.4 stacking).
4411-
g:AddWidget(GUI:CreateCheckbox(parent, L["Draw above frame border"], proxy, "drawAboveFrameBorder", RPL), 28)
4426+
local drawAboveChk = g:AddWidget(GUI:CreateCheckbox(parent, L["Draw above frame border"], proxy, "drawAboveFrameBorder", RPL), 28)
4427+
-- 12.1: border stacking is engine-managed on the container path —
4428+
-- not wired yet; planned with the z-order polish pass.
4429+
GUI:BlockControl12_1(drawAboveChk, "roadmap", { id = "ad:drawaboveborder", page = L["Aura Designer"],
4430+
when = function() return DF.AuraContainer and DF.AuraContainer.IsSupported and DF.AuraContainer.IsSupported() end })
44124431
swmCheck = GUI:CreateCheckbox(parent, L["Show When Missing"], proxy, "showWhenMissing", function()
44134432
DF.AuraDesigner.Engine:ForceRefreshAllFrames()
44144433
end)
@@ -5028,8 +5047,15 @@ local function BuildGlobalView(parent)
50285047
AddGroup(L["General"], function(g)
50295048
g:AddWidget(GUI:CreateSlider(parent, L["Default Icon Size"], 8, 64, 1, defaults, "iconSize"), 50)
50305049
g:AddWidget(GUI:CreateSlider(parent, L["Default Scale"], 0.5, 3.0, 0.05, defaults, "iconScale"), 50)
5031-
g:AddWidget(GUI:CreateSlider(parent, L["Default Frame Level"], -10, 30, 1, defaults, "indicatorFrameLevel"), 50)
5032-
g:AddWidget(GUI:CreateDropdown(parent, L["Default Frame Strata"], OPTS.FRAME_STRATA_OPTIONS, defaults, "indicatorFrameStrata"), 50)
5050+
local defLevelSl = g:AddWidget(GUI:CreateSlider(parent, L["Default Frame Level"], -10, 30, 1, defaults, "indicatorFrameLevel"), 50)
5051+
local defStrataDD = g:AddWidget(GUI:CreateDropdown(parent, L["Default Frame Strata"], OPTS.FRAME_STRATA_OPTIONS, defaults, "indicatorFrameStrata"), 50)
5052+
-- 12.1: the container render reads only the PER-INDICATOR Frame Level
5053+
-- (tonumber(indicator.frameLevel) or 0) — these global defaults aren't
5054+
-- applied (the editor proxy displays them as fallbacks, live ignores
5055+
-- them) and strata isn't wired at all. Planned with the z-order polish.
5056+
local zGate = function() return DF.AuraContainer and DF.AuraContainer.IsSupported and DF.AuraContainer.IsSupported() end
5057+
GUI:BlockControl12_1(defLevelSl, "roadmap", { id = "ad:defaultframelevel", page = L["Aura Designer"], when = zGate })
5058+
GUI:BlockControl12_1(defStrataDD, "roadmap", { id = "ad:defaultframestrata", page = L["Aura Designer"], when = zGate })
50335059
g:AddWidget(GUI:CreateCheckbox(parent, L["Show Duration"], defaults, "showDuration"), 24)
50345060
g:AddWidget(GUI:CreateCheckbox(parent, L["Show Stacks"], defaults, "showStacks"), 24)
50355061
g:AddWidget(GUI:CreateCheckbox(parent, L["Hide Cooldown Swipe"], defaults, "hideSwipe"), 24)
@@ -9328,23 +9354,3 @@ function DF:AuraDesigner_RefreshPage()
93289354
DF:InvalidateAuraLayout()
93299355
end
93309356
end
9331-
9332-
-- ============================================================
9333-
-- TAB DISABLE STATE
9334-
-- Standalone function so it can be called from GUI.lua on open
9335-
-- and from RefreshPage when the enable checkbox toggles.
9336-
-- ============================================================
9337-
9338-
-- Disable the My Buff Indicators tab when AD is enabled (never compatible).
9339-
-- Buffs tab is always accessible — it can coexist with AD.
9340-
function DF:ApplyAuraDesignerTabState()
9341-
local guiRef = DF.GUI
9342-
if not guiRef or not guiRef.Tabs then return end
9343-
if not DF.db then return end
9344-
9345-
local mode = (guiRef.SelectedMode) or "party"
9346-
local adCfg = DF.GetModeAuraDesigner and DF:GetModeAuraDesigner(mode)
9347-
local adEnabled = adCfg and adCfg.enabled
9348-
9349-
-- My Buff Indicators tab removed — feature deprecated
9350-
end

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,17 @@ DandersFrames has been rebuilt for WoW 12.1 (Midnight), which fundamentally chan
3535
* (Aura Designer) Every indicator has a show/hide eye — turn one off without deleting it.
3636
* (Aura Designer) The editor header is condensed to a single row; Sound Alerts moved to the Global tab.
3737
* (Profiles) Custom filters and your category tweaks travel with profile exports — including filters linked in the Aura Designer.
38+
* (Profiles) Custom filters picked inside a raid auto layout's settings are handled everywhere the rest of the profile is: deleting a filter now removes it from every layout (including the active one), exports carry filters only a layout references, and imports re-link them instead of pointing at the wrong filter on the receiving account.
39+
* (Frames) The Out of Range "Text Alpha" slider now also governs pet frame text and the test-mode preview — those still followed hidden per-element values no control could change.
40+
* (Frames) DandersFrames no longer overwrites Blizzard's own raid-frame dispel indicator setting at every login — a leftover from a long-removed option that kept forcing a value you couldn't change.
41+
* (Interface) The Filter Designer's add-by-ID box now rejects over-long spell IDs like the spell picker does, and a spell picker first opened during combat regains its Escape-to-close afterwards.
42+
* (Profiles) Role colours (tank/healer/damage) now travel with profile exports.
43+
* (Aura Designer) The Frame Strata dropdowns, the global Default Frame Level, and "Draw above frame border" are now marked as not yet available on 12.1 — they previously looked live but weren't applied (indicator z-order is engine-managed for now; the per-indicator Frame Level slider does work). Planned to return with a z-order pass.
44+
* (Interface) Removed the Resurrection icon's "Pending Text" box and the "My Buff Indicators" export category — neither had done anything (the text was never rendered; the category exported no settings).
45+
* (Auras) Fixed an error ("Attempt to access forbidden object") from the dispel overlay when zoning out of an instance mid-run — the overlay's layout pass could measure a protected aura-button rect during the transition; it now measures safely and falls back to defaults for that one pass.
46+
* (Bars) Fixed a gap on either side of a "Match Health Bar Width" resource bar at frame border sizes 1-3 (most visible with a non-zero Frame Padding). The bar now sits flush inside the border, and stays aligned with it at any UI scale.
47+
* (Frames) Fixed grouped raid frames staying invisible after converting a raid to a party and back until a /reload — the frames were alive underneath, but their group anchors were never restored on re-entering the raid.
48+
* (Frames) Clicks on party and raid frames no longer redirect to a member's vehicle or pet slot while the game flags them as being in a vehicle (sitting on housing furniture counts) — a legacy behaviour Blizzard's own frames dropped, which could target the wrong unit or open a pet menu.
3849
* (Auras) **The Aura Blacklist has been retired**, replaced by the new filter system. Previously blacklisted buffs will show again — hide them via the Filter Designer instead. Individual debuffs can't be hidden on this version of the game.
3950
* (Auras) **New: Debuff Filters.** The debuff bar is now filtered by categories on the Aura Filters page — Boss, Role, Priority, Crowd Control, Raid and Dispellable (by you or by anyone). "Show All Debuffs" keeps the old behaviour.
4051
* (Auras) The "All Dispellable" debuff filter mode now actually filters — it previously showed every debuff.

ClickCasting/Bindings.lua

Lines changed: 7 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -289,75 +289,13 @@ function CC:GetBindingDisplayIcon(binding)
289289
return QM
290290
end
291291

292-
-- BINDING MIGRATION
293-
-- ============================================================
294-
-- Migrate bindings to use root spell IDs instead of override spell IDs
295-
-- This ensures bindings survive talent changes (e.g., Chrono Flames -> Living Flame)
296-
297-
local MIGRATION_VERSION = 1 -- Increment this when adding new migrations
298-
299-
function CC:MigrateBindingsToRootSpells()
300-
-- Check if we have access to the saved data
301-
if not DandersFrames_ClickCastDB then return end
302-
303-
local _, classId = UnitClassBase("player")
304-
if not classId then return end
305-
306-
local classData = DandersFrames_ClickCastDB[classId]
307-
if not classData or not classData.profiles then return end
308-
309-
-- Check if migration already done for this class
310-
local currentMigration = classData.migrationVersion or 0
311-
312-
if currentMigration >= MIGRATION_VERSION then
313-
return -- Already migrated
314-
end
315-
316-
local totalMigrated = 0
317-
318-
-- Migrate ALL profiles for this class
319-
for profileName, profile in pairs(classData.profiles) do
320-
if profile.bindings then
321-
local profileMigrated = 0
322-
323-
for i, binding in ipairs(profile.bindings) do
324-
if binding.spellName and binding.spellId then
325-
-- Check if this spell has a root spell
326-
if C_Spell.GetBaseSpell then
327-
local rootId = C_Spell.GetBaseSpell(binding.spellId)
328-
if rootId and rootId ~= binding.spellId then
329-
-- Get the root spell's name
330-
local rootInfo = C_Spell.GetSpellInfo(rootId)
331-
if rootInfo and rootInfo.name then
332-
local oldName = binding.spellName
333-
334-
-- Update binding to use root spell
335-
binding.spellName = rootInfo.name
336-
binding.spellId = rootId
337-
338-
profileMigrated = profileMigrated + 1
339-
print("|cff33cc66DandersFrames:|r [" .. profileName .. "] Migrated '" .. oldName .. "' -> '" .. rootInfo.name .. "'")
340-
end
341-
end
342-
end
343-
end
344-
end
345-
346-
totalMigrated = totalMigrated + profileMigrated
347-
end
348-
end
349-
350-
-- Mark migration as complete for this class
351-
classData.migrationVersion = MIGRATION_VERSION
352-
353-
if totalMigrated > 0 then
354-
print("|cff33cc66DandersFrames:|r Migrated " .. totalMigrated .. " binding(s) to use root spells for better talent compatibility.")
355-
-- Refresh the active profile's bindings reference
356-
if self.profile and self.db then
357-
self.db.bindings = self.profile.bindings
358-
end
359-
end
360-
end
292+
-- (Removed) CC:MigrateBindingsToRootSpells — the one-time rewrite of saved
293+
-- bindings to root spell ids. It guarded on DandersFrames_ClickCastDB, a
294+
-- global that never existed (the real DB is DandersFramesClickCastingDB), so
295+
-- it silently no-opped for every user since it shipped. Superseded anyway:
296+
-- root/override resolution happens live at bind time via C_Spell.GetBaseSpell
297+
-- / GetOverrideSpell (see trueRootId below), so stored ids no longer need a
298+
-- one-shot rewrite.
361299

362300
-- Check if a binding should be active based on load conditions
363301
function CC:ShouldBindingLoad(binding)

ClickCasting/Events.lua

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,6 @@ function CC:RegisterEvents()
7878
elseif event == "PLAYER_ENTERING_WORLD" then
7979
-- Initial load or reload
8080
C_Timer.After(0.5, function()
81-
-- Run one-time migration to convert bindings to root spells
82-
CC:MigrateBindingsToRootSpells()
83-
8481
CC:RegisterAllFrames()
8582
-- Register Blizzard frames if any binding needs them
8683
if CC:AnyBindingNeedsBlizzardFrames() then

0 commit comments

Comments
 (0)