From 2ce4d1169832ecf2fad491bd8c1570dddf36fe96 Mon Sep 17 00:00:00 2001 From: Brues <5278969+brues-code@users.noreply.github.com> Date: Sun, 26 Jul 2026 14:52:39 -0500 Subject: [PATCH] Use ClassicAPI EventUtil for addon-load/login extension wiring Replace hand-rolled ADDON_LOADED/PLAYER_LOGIN handlers with EventUtil.ContinueOnAddOnLoaded / ContinueOnPlayerLogin, which fire immediately if the event already happened -- removing the "we loaded before the target addon and missed its ADDON_LOADED" workarounds. - pfUI compat: ContinueOnAddOnLoaded("pfUI") + ContinueOnPlayerLogin; drops the missed-event fallback (login path still re-runs SetupCompatibility). - MacroErrorUI / MacroLengthWarn: ContinueOnAddOnLoaded("Blizzard_MacroUI"), folding their manual "already loaded" checks. - 9 Mouseover extensions (ag_UnitFrames, CT_RaidAssist, CT_UnitFrames, DiscordUnitFrames, Grid, NotGrid, Cursive, sRaidFrames, PerfectRaid): ContinueOnAddOnLoaded("", OnLoad). Since immediate-fire passes no event args, the old `arg1 == "X"` checks are replaced by the addon-name gate (global guards kept where present); also removes the buggy UnregisterEvent("ADDON_LOADED", "Onload") no-ops that never fired. Addon names match file names; drops support for renamed folders (e.g. -master). --- Compatibility/pfUI.lua | 38 +++++++++++++--------- Extensions/MacroErrorUI.lua | 16 ++------- Extensions/MacroLengthWarn.lua | 19 +++-------- Extensions/Mouseover/CT_RaidAssist.lua | 7 +--- Extensions/Mouseover/CT_UnitFrames.lua | 5 ++- Extensions/Mouseover/Cursive.lua | 20 +++++------- Extensions/Mouseover/DiscordUnitFrames.lua | 7 +--- Extensions/Mouseover/Grid.lua | 7 +--- Extensions/Mouseover/NotGrid.lua | 4 +-- Extensions/Mouseover/PerfectRaid.lua | 7 +--- Extensions/Mouseover/ag_UnitFrames.lua | 4 +-- Extensions/Mouseover/sRaidFrames.lua | 7 +--- 12 files changed, 46 insertions(+), 95 deletions(-) diff --git a/Compatibility/pfUI.lua b/Compatibility/pfUI.lua index 8d5e399..a237db9 100644 --- a/Compatibility/pfUI.lua +++ b/Compatibility/pfUI.lua @@ -2,9 +2,10 @@ local _G = _G or getfenv(0) local CleveRoids = _G.CleveRoids or {} local Extension = CleveRoids.RegisterExtension("Compatibility_pfUI") -Extension.RegisterEvent("ADDON_LOADED", "ADDON_LOADED") -Extension.RegisterEvent("PLAYER_LOGIN", "PLAYER_LOGIN") Extension.Debug = false +-- pfUI-loaded and player-login handlers are wired via ClassicAPI's EventUtil at +-- the bottom of the file (ContinueOnAddOnLoaded fires immediately if pfUI already +-- loaded, so no separate "we missed pfUI's ADDON_LOADED" fallback is needed). -- Track pfUI state Extension.pfUILoaded = false @@ -726,23 +727,22 @@ function Extension.OnLoad() SLASH_PFUICD1 = "/pfuicd" end -function Extension.ADDON_LOADED() - -- Check if pfUI just loaded AND the global actually exists - -- (another addon could be named "pfUI" without being the real UI framework) - if arg1 == "pfUI" and pfUI then - Extension.pfUILoaded = true - -- pfUI modules load after ADDON_LOADED, so schedule a check - if CleveRoids.ScheduleTimer then - CleveRoids.ScheduleTimer(function() - Extension.SetupCompatibility() - end, 0.5) - end +-- Fires once pfUI has loaded (immediately if it loaded before us, via EventUtil). +function Extension.OnPfUILoaded() + -- Guard: only the real pfUI framework sets this global (another addon could be + -- named "pfUI" without being the UI framework). + if not pfUI then return end + Extension.pfUILoaded = true + -- pfUI's submodules initialize after its ADDON_LOADED, so defer the setup. + if CleveRoids.ScheduleTimer then + CleveRoids.ScheduleTimer(function() + Extension.SetupCompatibility() + end, 0.5) end end -function Extension.PLAYER_LOGIN() - -- If pfUI loaded before SCRM (alphabetical order), ADDON_LOADED for pfUI was missed. - -- Re-run InitPfUIIntegration here to ensure lib.objects is linked correctly. +function Extension.OnPlayerLogin() + -- Ensure lib.objects is linked correctly (InitPfUIIntegration is idempotent). if pfUI and not CleveRoids.hasPfUI76 then local lib = CleveRoids.libdebuff if lib and lib.InitPfUIIntegration then @@ -797,4 +797,10 @@ if not CleveRoids.ScheduleTimer then end end +-- Wire handlers via ClassicAPI EventUtil (fires immediately if the event already +-- happened, so load order relative to pfUI no longer matters). Registered here, +-- after the handlers are defined, since ContinueOnAddOnLoaded may fire inline. +EventUtil.ContinueOnAddOnLoaded("pfUI", Extension.OnPfUILoaded) +EventUtil.ContinueOnPlayerLogin(Extension.OnPlayerLogin) + _G["CleveRoids"] = CleveRoids diff --git a/Extensions/MacroErrorUI.lua b/Extensions/MacroErrorUI.lua index a98851a..0951802 100644 --- a/Extensions/MacroErrorUI.lua +++ b/Extensions/MacroErrorUI.lua @@ -1391,12 +1391,6 @@ end -- Extension Entry Points -- ============================================================================ -function Extension.OnAddonLoaded() - if arg1 == "Blizzard_MacroUI" then - InstallHooks() - end -end - function Extension.OnLoad() -- Skip if macro checker is disabled if CleveRoidMacros and CleveRoidMacros.macrocheck == 0 then return end @@ -1404,13 +1398,9 @@ function Extension.OnLoad() -- Skip if SuperMacro is loaded (detected at load time) if SuperMacroFrame ~= nil then return end - -- Listen for macro UI loading - Extension.RegisterEvent("ADDON_LOADED", "OnAddonLoaded") - - -- If MacroFrame already exists (unlikely but safe), hook immediately - if MacroFrame and MacroFrameText then - InstallHooks() - end + -- Install once Blizzard's macro UI is available (fires immediately if already + -- loaded), replacing the ADDON_LOADED listener + manual "already loaded" check. + EventUtil.ContinueOnAddOnLoaded("Blizzard_MacroUI", InstallHooks) end _G["CleveRoids"] = CleveRoids diff --git a/Extensions/MacroLengthWarn.lua b/Extensions/MacroLengthWarn.lua index e55bfe8..333f2cf 100644 --- a/Extensions/MacroLengthWarn.lua +++ b/Extensions/MacroLengthWarn.lua @@ -133,12 +133,6 @@ function Extension.OnMacroFrameLoad() end end -function Extension.OnAddonLoaded() - if arg1 == "Blizzard_MacroUI" then - Extension.OnMacroFrameLoad() - end -end - function Extension.OnLoad() -- Schedule messages to show after UI is ready local function ShowMessages() @@ -178,16 +172,11 @@ function Extension.OnLoad() end end - -- Listen for macro UI loading - Extension.RegisterEvent("ADDON_LOADED", "OnAddonLoaded") + -- Hook the macro UI once available (fires immediately if already loaded). + EventUtil.ContinueOnAddOnLoaded("Blizzard_MacroUI", Extension.OnMacroFrameLoad) - -- Also try to hook MacroFrame_SaveMacro if it already exists - if MacroFrame_SaveMacro then - Extension.OnMacroFrameLoad() - end - - -- Register PLAYER_LOGIN to show status messages - Extension.RegisterEvent("PLAYER_LOGIN", "OnPlayerLogin") + -- Status messages on login (currently disabled inside OnPlayerLogin). + EventUtil.ContinueOnPlayerLogin(Extension.OnPlayerLogin) -- Store the message function for later Extension.ShowMessages = ShowMessages diff --git a/Extensions/Mouseover/CT_RaidAssist.lua b/Extensions/Mouseover/CT_RaidAssist.lua index 16b7276..2938203 100644 --- a/Extensions/Mouseover/CT_RaidAssist.lua +++ b/Extensions/Mouseover/CT_RaidAssist.lua @@ -6,7 +6,6 @@ local _G = _G or getfenv(0) local CleveRoids = _G.CleveRoids or {} local Extension = CleveRoids.RegisterExtension("CT_RaidAssist") -Extension.RegisterEvent("ADDON_LOADED", "OnLoad") function Extension.OnEnter() local tempOptions = CT_RAMenu_Options["temp"] @@ -49,14 +48,10 @@ function Extension.OnLeave() end function Extension.OnLoad() - if arg1 ~= "CT_RaidAssist" then - return - end - Extension.Hook("CT_RA_MemberFrame_OnEnter", "OnEnter") Extension.HookMethod(_G["GameTooltip"], "Hide", "OnLeave") Extension.HookMethod(_G["GameTooltip"], "FadeOut", "OnLeave") end -_G["CleveRoids"] = CleveRoids +EventUtil.ContinueOnAddOnLoaded("CT_RaidAssist", Extension.OnLoad) diff --git a/Extensions/Mouseover/CT_UnitFrames.lua b/Extensions/Mouseover/CT_UnitFrames.lua index 6b6b607..ec24c30 100644 --- a/Extensions/Mouseover/CT_UnitFrames.lua +++ b/Extensions/Mouseover/CT_UnitFrames.lua @@ -6,7 +6,6 @@ local _G = _G or getfenv(0) local CleveRoids = _G.CleveRoids or {} local Extension = CleveRoids.RegisterExtension("CT_UnitFrames") -Extension.RegisterEvent("ADDON_LOADED", "OnLoad") function Extension.SetHook(widget) local hookedOnEnter = widget:GetScript("OnEnter") @@ -25,7 +24,7 @@ function Extension.SetHook(widget) end function Extension.OnLoad() - if arg1 ~= "CT_UnitFrames" or not CT_AssistFrame then + if not CT_AssistFrame then return end CleveRoids.Print("CT_UnitFrames module loaded.") @@ -36,4 +35,4 @@ function Extension.OnLoad() Extension.SetHook(CT_AssistFrame_Drag) end -_G["CleveRoids"] = CleveRoids +EventUtil.ContinueOnAddOnLoaded("CT_UnitFrames", Extension.OnLoad) diff --git a/Extensions/Mouseover/Cursive.lua b/Extensions/Mouseover/Cursive.lua index 335015b..104195e 100644 --- a/Extensions/Mouseover/Cursive.lua +++ b/Extensions/Mouseover/Cursive.lua @@ -9,7 +9,6 @@ local CleveRoids = _G.CleveRoids or {} CleveRoids.Hooks = CleveRoids.Hooks or {} local Extension = CleveRoids.RegisterExtension("CursiveMouseover") -Extension.RegisterEvent("ADDON_LOADED", "OnLoad") local hooked = false @@ -66,16 +65,13 @@ local function HookCursiveUI() end function Extension.OnLoad() - -- Try to hook when Cursive loads - if arg1 == "Cursive" then - -- Delay slightly to ensure Cursive.ui is initialized - local frame = CreateFrame("Frame") - frame:SetScript("OnUpdate", function() - if HookCursiveUI() then - this:Hide() - end - end) - end + -- Delay slightly to ensure Cursive.ui is initialized + local frame = CreateFrame("Frame") + frame:SetScript("OnUpdate", function() + if HookCursiveUI() then + this:Hide() + end + end) end -- Also try to hook immediately in case Cursive is already loaded @@ -83,4 +79,4 @@ if Cursive and Cursive.ui then HookCursiveUI() end -_G["CleveRoids"] = CleveRoids +EventUtil.ContinueOnAddOnLoaded("Cursive", Extension.OnLoad) diff --git a/Extensions/Mouseover/DiscordUnitFrames.lua b/Extensions/Mouseover/DiscordUnitFrames.lua index 5e3dbfb..c0d7d3b 100644 --- a/Extensions/Mouseover/DiscordUnitFrames.lua +++ b/Extensions/Mouseover/DiscordUnitFrames.lua @@ -6,7 +6,6 @@ local _G = _G or getfenv(0) local CleveRoids = _G.CleveRoids or {} local Extension = CleveRoids.RegisterExtension("DiscordUnitFrames") -Extension.RegisterEvent("ADDON_LOADED", "OnLoad") function Extension.OnEnterFrame() CleveRoids.SetMouseoverFrom("duf", this.unit) @@ -27,10 +26,6 @@ function Extension.OnLeaveElement() end function Extension.OnLoad() - if arg1 ~= "DiscordUnitFrames" then - return - end - CleveRoids.ClearHooks() Extension.Hook("DUF_UnitFrame_OnEnter", "OnEnterFrame") Extension.Hook("DUF_UnitFrame_OnLeave", "OnLeaveFrame") @@ -39,4 +34,4 @@ function Extension.OnLoad() Extension.Hook("DUF_Element_OnLeave", "OnLeaveElement") end -_G["CleveRoids"] = CleveRoids +EventUtil.ContinueOnAddOnLoaded("DiscordUnitFrames", Extension.OnLoad) diff --git a/Extensions/Mouseover/Grid.lua b/Extensions/Mouseover/Grid.lua index 3122375..80000f5 100644 --- a/Extensions/Mouseover/Grid.lua +++ b/Extensions/Mouseover/Grid.lua @@ -8,7 +8,6 @@ local CleveRoids = _G.CleveRoids or {} CleveRoids.Hooks = CleveRoids.Hooks or {} local Extension = CleveRoids.RegisterExtension("Grid") -Extension.RegisterEvent("ADDON_LOADED", "OnLoad") function Extension.OnEnter(unit) CleveRoids.SetMouseoverFrom("grid", unit) @@ -20,10 +19,6 @@ function Extension.OnLeave() end function Extension.OnLoad() - if arg1 ~= "Grid" then - return - end - CleveRoids.Hooks.Grid = { CreateFrames = GridFrame.frameClass.prototype.CreateFrames} GridFrame.frameClass.prototype.CreateFrames = CleveRoids.GrdCreateFrames end @@ -111,4 +106,4 @@ function CleveRoids:GrdCreateFrames() ClickCastFrames[self.frame] = true end -_G["CleveRoids"] = CleveRoids +EventUtil.ContinueOnAddOnLoaded("Grid", Extension.OnLoad) diff --git a/Extensions/Mouseover/NotGrid.lua b/Extensions/Mouseover/NotGrid.lua index b677124..959a571 100644 --- a/Extensions/Mouseover/NotGrid.lua +++ b/Extensions/Mouseover/NotGrid.lua @@ -8,7 +8,6 @@ local CleveRoids = _G.CleveRoids or {} local CreateFrames = nil local Extension = CleveRoids.RegisterExtension("NotGrid") -Extension.RegisterEvent("ADDON_LOADED", "OnLoad") function Extension.OnEnter() CleveRoids.SetMouseoverFrom("ngrid", this.unit) @@ -48,7 +47,6 @@ function Extension.OnLoad() CreateFrames = NotGrid.CreateFrames NotGrid.CreateFrames = CleveRoids.NotGrid_CreateFrames - Extension.UnregisterEvent("ADDON_LOADED", "Onload") end -_G["CleveRoids"] = CleveRoids +EventUtil.ContinueOnAddOnLoaded("NotGrid", Extension.OnLoad) diff --git a/Extensions/Mouseover/PerfectRaid.lua b/Extensions/Mouseover/PerfectRaid.lua index 38ba175..9fb6ffe 100644 --- a/Extensions/Mouseover/PerfectRaid.lua +++ b/Extensions/Mouseover/PerfectRaid.lua @@ -8,7 +8,6 @@ local CleveRoids = _G.CleveRoids or {} CleveRoids.Hooks = CleveRoids.Hooks or {} local Extension = CleveRoids.RegisterExtension("PerfectRaid") -Extension.RegisterEvent("ADDON_LOADED", "OnLoad") function Extension.OnEnter(unit) CleveRoids.SetMouseoverFrom("praid", unit) @@ -20,10 +19,6 @@ function Extension.OnLeave() end function Extension.OnLoad() - if arg1 ~= "PerfectRaid" then - return - end - CleveRoids.Hooks.PerfectRaid = { CreateFrame = PerfectRaid.CreateFrame } PerfectRaid.CreateFrame = CleveRoids.PerfectRaidCreateFrame end @@ -134,4 +129,4 @@ function CleveRoids.PerfectRaidCreateFrame(self, num) --]] end -_G["CleveRoids"] = CleveRoids +EventUtil.ContinueOnAddOnLoaded("PerfectRaid", Extension.OnLoad) diff --git a/Extensions/Mouseover/ag_UnitFrames.lua b/Extensions/Mouseover/ag_UnitFrames.lua index 3493d76..6720bba 100644 --- a/Extensions/Mouseover/ag_UnitFrames.lua +++ b/Extensions/Mouseover/ag_UnitFrames.lua @@ -4,7 +4,6 @@ local CleveRoids = _G.CleveRoids or {} CleveRoids.Hooks = CleveRoids.Hooks or {} local Extension = CleveRoids.RegisterExtension("ag_UnitFrames") -Extension.RegisterEvent("ADDON_LOADED", "OnLoad") function Extension.OnEnter(unit) CleveRoids.SetMouseoverFrom("aguf", unit) @@ -23,7 +22,6 @@ function Extension.OnLoad() CleveRoids.Hooks.ag_UnitFrames = { OnEnter = aUF.classes.aUFunit.prototype.OnEnter, OnLeave = aUF.classes.aUFunit.prototype.OnLeave} aUF.classes.aUFunit.prototype.OnEnter = CleveRoids.aUFOnEnter aUF.classes.aUFunit.prototype.OnLeave = CleveRoids.aUFOnLeave - Extension.UnregisterEvent("ADDON_LOADED", "Onload") end -- Taken from ag_UnitClass.lua @@ -41,4 +39,4 @@ function CleveRoids:aUFOnLeave() end -_G["CleveRoids"] = CleveRoids +EventUtil.ContinueOnAddOnLoaded("ag_UnitFrames", Extension.OnLoad) diff --git a/Extensions/Mouseover/sRaidFrames.lua b/Extensions/Mouseover/sRaidFrames.lua index a6f2524..1cc6040 100644 --- a/Extensions/Mouseover/sRaidFrames.lua +++ b/Extensions/Mouseover/sRaidFrames.lua @@ -6,7 +6,6 @@ local _G = _G or getfenv(0) local CleveRoids = _G.CleveRoids or {} local Extension = CleveRoids.RegisterExtension("sRaidFrames") -Extension.RegisterEvent("ADDON_LOADED", "OnLoad") function Extension:OnEnter(frame) CleveRoids.SetMouseoverFrom("sraid", frame.unit) @@ -18,13 +17,9 @@ function Extension.OnLeave() end function Extension.OnLoad() - if arg1 ~= "sRaidFrames" then - return - end - Extension.HookMethod(sRaidFrames, "UnitTooltip", "OnEnter") Extension.HookMethod(_G["GameTooltip"], "Hide", "OnLeave") Extension.HookMethod(_G["GameTooltip"], "FadeOut", "OnLeave") end -_G["CleveRoids"] = CleveRoids +EventUtil.ContinueOnAddOnLoaded("sRaidFrames", Extension.OnLoad)