Fix addon initialization order with guard checks

Refactor mouseover extensions to split initialization into two phases: OnLoad (empty) and OnAddOnLoad (actual setup). This ensures hooks are only registered when the target addon's globals are defined. Add guard clauses to check for required functions before hooking. Also remove Cursive's premature initialization attempt.
This commit is contained in:
Brues
2026-07-27 14:32:12 -05:00
parent 586c51b53a
commit 9bebbbb836
8 changed files with 33 additions and 19 deletions
+5 -2
View File
@@ -47,11 +47,14 @@ function Extension.OnLeave()
CleveRoids.ClearMouseoverFrom("native")
end
function Extension.OnLoad()
function Extension.OnLoad() end
function Extension.OnAddOnLoad()
if not CT_RA_MemberFrame_OnEnter then return end
Extension.Hook("CT_RA_MemberFrame_OnEnter", "OnEnter")
Extension.HookMethod(_G["GameTooltip"], "Hide", "OnLeave")
Extension.HookMethod(_G["GameTooltip"], "FadeOut", "OnLeave")
end
EventUtil.ContinueOnAddOnLoaded("CT_RaidAssist", Extension.OnLoad)
EventUtil.ContinueOnAddOnLoaded("CT_RaidAssist", Extension.OnAddOnLoad)
+4 -2
View File
@@ -23,7 +23,9 @@ function Extension.SetHook(widget)
end)
end
function Extension.OnLoad()
function Extension.OnLoad() end
function Extension.OnAddOnLoad()
if not CT_AssistFrame then
return
end
@@ -35,4 +37,4 @@ function Extension.OnLoad()
Extension.SetHook(CT_AssistFrame_Drag)
end
EventUtil.ContinueOnAddOnLoaded("CT_UnitFrames", Extension.OnLoad)
EventUtil.ContinueOnAddOnLoaded("CT_UnitFrames", Extension.OnAddOnLoad)
-5
View File
@@ -74,9 +74,4 @@ function Extension.OnLoad()
end)
end
-- Also try to hook immediately in case Cursive is already loaded
if Cursive and Cursive.ui then
HookCursiveUI()
end
EventUtil.ContinueOnAddOnLoaded("Cursive", Extension.OnLoad)
+5 -2
View File
@@ -25,7 +25,10 @@ function Extension.OnLeaveElement()
CleveRoids.ClearMouseoverFrom("native")
end
function Extension.OnLoad()
function Extension.OnLoad() end
function Extension.OnAddOnLoad()
if not DUF_UnitFrame_OnEnter then return end
CleveRoids.ClearHooks()
Extension.Hook("DUF_UnitFrame_OnEnter", "OnEnterFrame")
Extension.Hook("DUF_UnitFrame_OnLeave", "OnLeaveFrame")
@@ -34,4 +37,4 @@ function Extension.OnLoad()
Extension.Hook("DUF_Element_OnLeave", "OnLeaveElement")
end
EventUtil.ContinueOnAddOnLoaded("DiscordUnitFrames", Extension.OnLoad)
EventUtil.ContinueOnAddOnLoaded("DiscordUnitFrames", Extension.OnAddOnLoad)
+5 -2
View File
@@ -18,7 +18,10 @@ function Extension.OnLeave()
CleveRoids.ClearMouseoverFrom("native")
end
function Extension.OnLoad()
function Extension.OnLoad() end
function Extension.OnAddOnLoad()
if not GridFrame then return end
CleveRoids.Hooks.Grid = { CreateFrames = GridFrame.frameClass.prototype.CreateFrames}
GridFrame.frameClass.prototype.CreateFrames = CleveRoids.GrdCreateFrames
end
@@ -106,4 +109,4 @@ function CleveRoids:GrdCreateFrames()
ClickCastFrames[self.frame] = true
end
EventUtil.ContinueOnAddOnLoaded("Grid", Extension.OnLoad)
EventUtil.ContinueOnAddOnLoaded("Grid", Extension.OnAddOnLoad)
+4 -2
View File
@@ -38,7 +38,9 @@ function CleveRoids:NotGrid_CreateFrames()
end
end
function Extension.OnLoad()
function Extension.OnLoad() end
function Extension.OnAddOnLoad()
-- NotGrid loads before CleveRoids, so if NotGrid is enabled, then it's global will exist.
if not NotGrid then
return
@@ -49,4 +51,4 @@ function Extension.OnLoad()
end
EventUtil.ContinueOnAddOnLoaded("NotGrid", Extension.OnLoad)
EventUtil.ContinueOnAddOnLoaded("NotGrid", Extension.OnAddOnLoad)
+5 -2
View File
@@ -18,7 +18,10 @@ function Extension.OnLeave()
CleveRoids.ClearMouseoverFrom("native")
end
function Extension.OnLoad()
function Extension.OnLoad() end
function Extension.OnAddOnLoad()
if not PerfectRaid then return end
CleveRoids.Hooks.PerfectRaid = { CreateFrame = PerfectRaid.CreateFrame }
PerfectRaid.CreateFrame = CleveRoids.PerfectRaidCreateFrame
end
@@ -129,4 +132,4 @@ function CleveRoids.PerfectRaidCreateFrame(self, num)
--]]
end
EventUtil.ContinueOnAddOnLoaded("PerfectRaid", Extension.OnLoad)
EventUtil.ContinueOnAddOnLoaded("PerfectRaid", Extension.OnAddOnLoad)
+5 -2
View File
@@ -16,10 +16,13 @@ function Extension.OnLeave()
CleveRoids.ClearMouseoverFrom("native")
end
function Extension.OnLoad()
function Extension.OnLoad() end
function Extension.OnAddOnLoad()
if not sRaidFrames then return end
Extension.HookMethod(sRaidFrames, "UnitTooltip", "OnEnter")
Extension.HookMethod(_G["GameTooltip"], "Hide", "OnLeave")
Extension.HookMethod(_G["GameTooltip"], "FadeOut", "OnLeave")
end
EventUtil.ContinueOnAddOnLoaded("sRaidFrames", Extension.OnLoad)
EventUtil.ContinueOnAddOnLoaded("sRaidFrames", Extension.OnAddOnLoad)