diff --git a/EllesmereUIRaidFrames/EllesmereUIRaidFrames.lua b/EllesmereUIRaidFrames/EllesmereUIRaidFrames.lua index f86dcffa..526a4cbc 100644 --- a/EllesmereUIRaidFrames/EllesmereUIRaidFrames.lua +++ b/EllesmereUIRaidFrames/EllesmereUIRaidFrames.lua @@ -575,6 +575,12 @@ local defaults = { dispelIconOffsetX = 0, dispelIconOffsetY = 0, dispelIconSize = 16, + -- 12.1 dispel ring thickness in physical pixels (-1 follows the icon's own + -- Border, 0 hides it). Stored explicitly rather than left to the `or 2` + -- read fallback: ReloadPartyFrames temp-swaps party values onto db.profile + -- and restores from a table keyed by the raid value, so a key with no + -- default is absent from that table and its party value would stick. + dispelIconBorderSize = 2, dispelClockBorder = false, -- animated clock-style dispel border (erases clockwise) on dispellable debuff icons dispelClockExtraBorder = 0, -- extra physical pixels added to the clock border thickness (on top of debuffBorderSize) dispellableDebuffLocation = "same", -- "same" = use the main debuff layout; else a separate anchor for dispellable debuffs @@ -10580,11 +10586,20 @@ do "hoverBorderEnabled", "hoverBorderSize", "hoverBorderColor", "hoverBorderAlpha", "targetBorderEnabled", "targetBorderSize", "targetBorderColor", "targetBorderAlpha", "threatBorderSize", }, + -- Must list every key the DISPELS section of the options page draws: + -- the party tab's blocking overlay is sized from that section's y-range, + -- so a control there is editable whenever "dispels" is unsynced. A key + -- filed under another section (or missing) is still editable but writes + -- the shared raid value. dispels = { "dispelBorderSize", "dispelOverlay", "dispelOverlayOpacity", "dispelShowAll", "showDispelIcons", "dispelIconPosition", "dispelIconOffsetX", "dispelIconOffsetY", "dispelIconSize", "dispelColorMagic", "dispelColorCurse", "dispelColorDisease", "dispelColorPoison", "dispelColorBleed", + "dispelIconBorderSize", "dispelOverlayPosition", + "dispelClockBorder", "dispelClockExtraBorder", + "dispellableDebuffLocation", "dispellableDebuffGrowDirection", + "dispellableDebuffOffsetX", "dispellableDebuffOffsetY", "dispellableDebuffSize", }, topNameBar = { "topNameBarEnabled", "topNameBarHeight", @@ -10610,8 +10625,8 @@ do "debuffPosition", "debuffOffsetX", "debuffOffsetY", "debuffGrowDirection", "debuffPerRow", "debuffWrapDirection", "debuffCap", "debuffHideTooltips", - "dispellableDebuffLocation", "dispellableDebuffGrowDirection", - "dispellableDebuffOffsetX", "dispellableDebuffOffsetY", "dispellableDebuffSize", + -- The dispellableDebuff* keys live in "dispels": that is the section + -- whose header their controls are drawn under. }, debuffStyle = { "debuffSize", "debuffIconZoom", "debuffBorderSize", "debuffBorderColor", "debuffSpacing", diff --git a/EllesmereUI_Migration.lua b/EllesmereUI_Migration.lua index 553a8134..48058763 100644 --- a/EllesmereUI_Migration.lua +++ b/EllesmereUI_Migration.lua @@ -4356,3 +4356,42 @@ EllesmereUI.RegisterMigration({ if type(p) == "table" then p.showCastTarget = false end end, }) + +-------------------------------------------------------------------------------- +-- Raid Frames: dispellableDebuff* keys moved party-sync sections +-- +-- Their controls are drawn under the DISPELS header but the keys were filed +-- under "debuffDisplay", so on the Party tab they were editable whenever +-- Dispels was unsynced while the write routed through Debuff Display. They now +-- file under "dispels". +-- +-- Writing one required BOTH sections custom, but re-syncing DISPELS afterwards +-- only deleted keys mapped to "dispels", so these could survive as a live +-- override under a custom Debuff Display with Dispels synced. Under the new +-- mapping that value would go dormant; the mirror case (dormant under a synced +-- Debuff Display, live once Dispels is custom) would switch on. +-- +-- Clear the override whenever its live/dormant state would flip. In the +-- flip-to-live case that preserves exactly what the party renders today; in +-- the flip-to-dormant case the party inherits raid either way, and clearing +-- stops the value reviving later. An override live in BOTH mappings (both +-- sections custom, the normal case) is left untouched. +-------------------------------------------------------------------------------- +EllesmereUI.RegisterMigration({ + id = "rf_dispellable_debuff_party_section_v1", + scope = "profile", + description = "Clear dispellableDebuff* party overrides whose live/dormant state would flip when the keys moved to the Dispels sync section.", + body = function(ctx) + local rf = ctx.profile.addons and ctx.profile.addons.EllesmereUIRaidFrames + if type(rf) ~= "table" then return end + local ss = type(rf.partySyncSections) == "table" and rf.partySyncSections or nil + local wasLive = (ss and ss.debuffDisplay == false) and true or false + local willBeLive = (ss and ss.dispels == false) and true or false + if wasLive == willBeLive then return end + rf.party_dispellableDebuffLocation = nil + rf.party_dispellableDebuffGrowDirection = nil + rf.party_dispellableDebuffOffsetX = nil + rf.party_dispellableDebuffOffsetY = nil + rf.party_dispellableDebuffSize = nil + end, +})