fix(tracker): guard VoiceOver questPlayButtons and AceGUI tree tooltip (#15)

Two crashes reported in #15 on Elune (1.6.3):

- TrackerUtils:IsVoiceOverLoaded only verified the VoiceOver addons were
  loaded, not that VoiceOver.QuestOverlayUI.questPlayButtons exists. Some
  VoiceOver builds expose a QuestOverlayUI without that table, so
  UpdateVoiceOverPlayButtons and SetAllPlayButtonAlpha crashed with
  'attempt to index field questPlayButtons (a nil value)'. Now verified in
  IsVoiceOverLoaded, which all play-button call sites gate on.

- AceGUIContainer-TreeGroup crashed indexing a nil AceGUI.tooltip when a
  conflicting addon registered a broken AceGUI-3.0 core (version 1.#INF)
  that won LibStub but never created the shared tooltip frame. The tree
  button handlers now lazily recreate it; widget version bumped 47->48 so
  the fixed widget wins registration.
This commit is contained in:
Xurkon
2026-06-09 20:41:37 -05:00
parent 08b266d7ba
commit 69a9a4a7a3
3 changed files with 22 additions and 3 deletions
+8 -1
View File
@@ -1232,7 +1232,14 @@ function TrackerUtils:GetSortedQuestIds()
end
function TrackerUtils:IsVoiceOverLoaded()
if (IsAddOnLoaded("AI_VoiceOver") and IsAddOnLoaded("AI_VoiceOverData_Vanilla")) then
-- Require not just that the VoiceOver addons are loaded, but that the runtime
-- structure we index actually exists. Some VoiceOver builds (e.g. on Elune) expose
-- a different QuestOverlayUI shape where questPlayButtons is absent, which previously
-- crashed UpdateVoiceOverPlayButtons / SetAllPlayButtonAlpha with "attempt to index
-- field 'questPlayButtons' (a nil value)". All play-button call sites gate on this
-- function, so verifying the table here makes them all safe.
if IsAddOnLoaded("AI_VoiceOver") and IsAddOnLoaded("AI_VoiceOverData_Vanilla")
and VoiceOver and VoiceOver.QuestOverlayUI and VoiceOver.QuestOverlayUI.questPlayButtons then
return true
end