diff --git a/mods/minimap-square.lua b/mods/minimap-square.lua index edc3431..a94de69 100644 --- a/mods/minimap-square.lua +++ b/mods/minimap-square.lua @@ -17,9 +17,25 @@ module.enable = function(self) Minimap:SetHeight(size) Minimap:SetPoint("CENTER", MinimapCluster, "TOP", 9, -98) Minimap:SetMaskTexture("Interface\\BUTTONS\\WHITE8X8") - Minimap.border = CreateFrame("Frame", nil, Minimap) + + -- IMPORTANT: enable() can be called multiple times (reload UI, toggling + -- the module in ShaguTweaks settings, expansion switch, etc). Without + -- reusing a single persistent frame, every call created a brand new + -- anonymous CreateFrame("Frame") parented to Minimap, and the old ones + -- were never released -- they kept piling up as orphaned children of + -- Minimap forever. That's a likely contributor to the minimap-related + -- crashes (addons like MinimapButtonFrame walk Minimap:GetChildren() + -- every second and can choke on the growing pile of stale frames). + -- We now store the border on the module and just reconfigure it if it + -- already exists, instead of creating a new frame. + if not self.border then + self.border = CreateFrame("Frame", nil, Minimap) + end + Minimap.border = self.border + Minimap.border:SetFrameStrata("BACKGROUND") Minimap.border:SetFrameLevel(1) + Minimap.border:ClearAllPoints() Minimap.border:SetPoint("TOPLEFT", Minimap, "TOPLEFT", -3, 3) Minimap.border:SetPoint("BOTTOMRIGHT", Minimap, "BOTTOMRIGHT", 3, -3) Minimap.border:SetBackdrop({ @@ -28,6 +44,7 @@ module.enable = function(self) insets = { left = 3, right = 3, top = 3, bottom = 3 }}) Minimap.border:SetBackdropBorderColor(.9,.8,.5,1) Minimap.border:SetBackdropColor(.4,.4,.4,1) + Minimap.border:Show() if _G.MinimapClock then if not self.clockOriginalPoint then @@ -41,8 +58,14 @@ module.enable = function(self) end module.disable = function(self) + -- Hide instead of leaking: keep the frame alive but out of the way so a + -- future enable() can reuse it cleanly. + if self.border then + self.border:Hide() + end + if _G.MinimapClock and self.clockOriginalPoint then MinimapClock:ClearAllPoints() MinimapClock:SetPoint(unpack(self.clockOriginalPoint)) end -end \ No newline at end of file +end