From 9bebbbb836a6d574315a1819ab5bdc85f2089128 Mon Sep 17 00:00:00 2001 From: Brues <5278969+brues-code@users.noreply.github.com> Date: Mon, 27 Jul 2026 14:32:12 -0500 Subject: [PATCH] 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. --- Extensions/Mouseover/CT_RaidAssist.lua | 7 +++++-- Extensions/Mouseover/CT_UnitFrames.lua | 6 ++++-- Extensions/Mouseover/Cursive.lua | 5 ----- Extensions/Mouseover/DiscordUnitFrames.lua | 7 +++++-- Extensions/Mouseover/Grid.lua | 7 +++++-- Extensions/Mouseover/NotGrid.lua | 6 ++++-- Extensions/Mouseover/PerfectRaid.lua | 7 +++++-- Extensions/Mouseover/sRaidFrames.lua | 7 +++++-- 8 files changed, 33 insertions(+), 19 deletions(-) diff --git a/Extensions/Mouseover/CT_RaidAssist.lua b/Extensions/Mouseover/CT_RaidAssist.lua index 2938203..65b1c28 100644 --- a/Extensions/Mouseover/CT_RaidAssist.lua +++ b/Extensions/Mouseover/CT_RaidAssist.lua @@ -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) diff --git a/Extensions/Mouseover/CT_UnitFrames.lua b/Extensions/Mouseover/CT_UnitFrames.lua index ec24c30..fdaa9c5 100644 --- a/Extensions/Mouseover/CT_UnitFrames.lua +++ b/Extensions/Mouseover/CT_UnitFrames.lua @@ -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) diff --git a/Extensions/Mouseover/Cursive.lua b/Extensions/Mouseover/Cursive.lua index 104195e..069e003 100644 --- a/Extensions/Mouseover/Cursive.lua +++ b/Extensions/Mouseover/Cursive.lua @@ -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) diff --git a/Extensions/Mouseover/DiscordUnitFrames.lua b/Extensions/Mouseover/DiscordUnitFrames.lua index c0d7d3b..29f3051 100644 --- a/Extensions/Mouseover/DiscordUnitFrames.lua +++ b/Extensions/Mouseover/DiscordUnitFrames.lua @@ -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) diff --git a/Extensions/Mouseover/Grid.lua b/Extensions/Mouseover/Grid.lua index 80000f5..109bcbb 100644 --- a/Extensions/Mouseover/Grid.lua +++ b/Extensions/Mouseover/Grid.lua @@ -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) diff --git a/Extensions/Mouseover/NotGrid.lua b/Extensions/Mouseover/NotGrid.lua index 959a571..c88dfd5 100644 --- a/Extensions/Mouseover/NotGrid.lua +++ b/Extensions/Mouseover/NotGrid.lua @@ -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) diff --git a/Extensions/Mouseover/PerfectRaid.lua b/Extensions/Mouseover/PerfectRaid.lua index 9fb6ffe..33a272d 100644 --- a/Extensions/Mouseover/PerfectRaid.lua +++ b/Extensions/Mouseover/PerfectRaid.lua @@ -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) diff --git a/Extensions/Mouseover/sRaidFrames.lua b/Extensions/Mouseover/sRaidFrames.lua index 1cc6040..c8eb22e 100644 --- a/Extensions/Mouseover/sRaidFrames.lua +++ b/Extensions/Mouseover/sRaidFrames.lua @@ -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)