From 82db70969a2a13b43c1c9704fa9d41edec48bc02 Mon Sep 17 00:00:00 2001 From: Parnic Date: Wed, 1 Jun 2022 08:29:39 -0500 Subject: [PATCH] Remove UnitPopupButtons usage I need to find a way to reintroduce this, but Blizzard's new method of building these frames doesn't look like it's going to be particularly easy. This stops error popups on 9.2.5 --- IceHUD.lua | 230 ++++++++++++++++++++++++------------------------ changelog.md | 4 + this_version.md | 4 +- 3 files changed, 121 insertions(+), 117 deletions(-) diff --git a/IceHUD.lua b/IceHUD.lua index 3a76df2..9ef86ea 100644 --- a/IceHUD.lua +++ b/IceHUD.lua @@ -684,134 +684,134 @@ function IceHUD:GetIsInLFGGroup() return IsInLFGGroup end -local BLACKLISTED_UNIT_MENU_OPTIONS = { - SET_FOCUS = "ICEHUD_SET_FOCUS", - CLEAR_FOCUS = "ICEHUD_CLEAR_FOCUS", - PET_DISMISS = "ICEHUD_PET_DISMISS", - LOCK_FOCUS_FRAME = true, - UNLOCK_FOCUS_FRAME = true, -} +if UnitPopupButtons then + local BLACKLISTED_UNIT_MENU_OPTIONS = { + SET_FOCUS = "ICEHUD_SET_FOCUS", + CLEAR_FOCUS = "ICEHUD_CLEAR_FOCUS", + PET_DISMISS = "ICEHUD_PET_DISMISS", + LOCK_FOCUS_FRAME = true, + UNLOCK_FOCUS_FRAME = true, + } -UnitPopupButtons["ICEHUD_SET_FOCUS"] = { - text = L["Type %s to set focus"]:format(SLASH_FOCUS1), - tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."], - dist = 0, -} + UnitPopupButtons["ICEHUD_SET_FOCUS"] = { + text = L["Type %s to set focus"]:format(SLASH_FOCUS1), + tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."], + dist = 0, + } -UnitPopupButtons["ICEHUD_CLEAR_FOCUS"] = { - text = L["Type %s to clear focus"]:format(SLASH_CLEARFOCUS1), - tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."], - dist = 0, -} + UnitPopupButtons["ICEHUD_CLEAR_FOCUS"] = { + text = L["Type %s to clear focus"]:format(SLASH_CLEARFOCUS1), + tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."], + dist = 0, + } -UnitPopupButtons["ICEHUD_PET_DISMISS"] = { - text = L["Use your Dismiss Pet spell to dismiss a pet"], - tooltipText = L["Blizzard currently does not provide a proper way to right-click dismiss a pet with custom unit frames."], - dist = 0, -} + UnitPopupButtons["ICEHUD_PET_DISMISS"] = { + text = L["Use your Dismiss Pet spell to dismiss a pet"], + tooltipText = L["Blizzard currently does not provide a proper way to right-click dismiss a pet with custom unit frames."], + dist = 0, + } -local munged_unit_menus = {} -local function munge_unit_menu(menu) - local result = munged_unit_menus[menu] - if result then - return result - end - - if not UnitPopupMenus then - munged_unit_menus[menu] = menu - return menu - end - - local data = UnitPopupMenus[menu] - if not data then - munged_unit_menus[menu] = menu - return menu - end - - local found = false - local _, v - for _, v in ipairs(data) do - if BLACKLISTED_UNIT_MENU_OPTIONS[v] then - found = true - break + local munged_unit_menus = {} + local function munge_unit_menu(menu) + local result = munged_unit_menus[menu] + if result then + return result end - end - if not found then - -- nothing to remove or add, we're all fine here. - munged_unit_menus[menu] = menu - return menu - end - - local new_data = {} - for _, v in ipairs(data) do - local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[v] - if v == "PET_DISMISS" and select(2, UnitClass("player")) == "WARLOCK" then - blacklisted = false + if not UnitPopupMenus then + munged_unit_menus[menu] = menu + return menu end - if not blacklisted then - new_data[#new_data+1] = v - elseif blacklisted ~= true then - new_data[#new_data+1] = blacklisted + + local data = UnitPopupMenus[menu] + if not data then + munged_unit_menus[menu] = menu + return menu end + + local found = false + local _, v + for _, v in ipairs(data) do + if BLACKLISTED_UNIT_MENU_OPTIONS[v] then + found = true + break + end + end + + if not found then + -- nothing to remove or add, we're all fine here. + munged_unit_menus[menu] = menu + return menu + end + + local new_data = {} + for _, v in ipairs(data) do + local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[v] + if v == "PET_DISMISS" and select(2, UnitClass("player")) == "WARLOCK" then + blacklisted = false + end + if not blacklisted then + new_data[#new_data+1] = v + elseif blacklisted ~= true then + new_data[#new_data+1] = blacklisted + end + end + local new_menu_name = "ICEHUD_" .. menu + + UnitPopupMenus[new_menu_name] = new_data + munged_unit_menus[menu] = new_menu_name + return new_menu_name end - local new_menu_name = "ICEHUD_" .. menu + IceHUD.MungeUnitMenu = munge_unit_menu - UnitPopupMenus[new_menu_name] = new_data - munged_unit_menus[menu] = new_menu_name - return new_menu_name -end -IceHUD.MungeUnitMenu = munge_unit_menu + local function figure_unit_menu(unit) + if unit == "focus" then + return "FOCUS" + end -local function figure_unit_menu(unit) - if unit == "focus" then - return "FOCUS" + if UnitIsUnit(unit, "player") then + return "SELF" + end + + if UnitIsUnit(unit, "vehicle") then + -- NOTE: vehicle check must come before pet check for accuracy's sake because + -- a vehicle may also be considered your pet + return "VEHICLE" + end + + if UnitIsUnit(unit, "pet") then + return "PET" + end + + if not UnitIsPlayer(unit) then + return "TARGET" + end + + local id = UnitInRaid(unit) + if id then + return "RAID_PLAYER", id + end + + if UnitInParty(unit) then + return "PARTY" + end + + return "PLAYER" end - if UnitIsUnit(unit, "player") then - return "SELF" - end - - if UnitIsUnit(unit, "vehicle") then - -- NOTE: vehicle check must come before pet check for accuracy's sake because - -- a vehicle may also be considered your pet - return "VEHICLE" - end - - if UnitIsUnit(unit, "pet") then - return "PET" - end - - if not UnitIsPlayer(unit) then - return "TARGET" - end - - local id = UnitInRaid(unit) - if id then - return "RAID_PLAYER", id - end - - if UnitInParty(unit) then - return "PARTY" - end - - return "PLAYER" -end - -IceHUD_UnitFrame_DropDown = CreateFrame("Frame", "IceHUD_UnitFrame_DropDown", UIParent, "UIDropDownMenuTemplate") -if UnitPopupFrames then + IceHUD_UnitFrame_DropDown = CreateFrame("Frame", "IceHUD_UnitFrame_DropDown", UIParent, "UIDropDownMenuTemplate") UnitPopupFrames[#UnitPopupFrames+1] = "IceHUD_UnitFrame_DropDown" -end -IceHUD.DropdownUnit = nil -UIDropDownMenu_Initialize(IceHUD_UnitFrame_DropDown, function() - if not IceHUD.DropdownUnit then - return - end + IceHUD.DropdownUnit = nil + UIDropDownMenu_Initialize(IceHUD_UnitFrame_DropDown, function() + if not IceHUD.DropdownUnit then + return + end - local menu, id = figure_unit_menu(IceHUD.DropdownUnit) - if menu then - menu = IceHUD.MungeUnitMenu(menu) - UnitPopup_ShowMenu(IceHUD_UnitFrame_DropDown, menu, IceHUD.DropdownUnit, nil, id) - end -end, "MENU", nil) + local menu, id = figure_unit_menu(IceHUD.DropdownUnit) + if menu then + menu = IceHUD.MungeUnitMenu(menu) + UnitPopup_ShowMenu(IceHUD_UnitFrame_DropDown, menu, IceHUD.DropdownUnit, nil, id) + end + end, "MENU", nil) +end \ No newline at end of file diff --git a/changelog.md b/changelog.md index 60ceb7e..4da5203 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +v1.13.15: + +- Fixed compatibility with WoW 9.2.5. + v1.13.14: - Fixed target health updating infrequently on Classic. diff --git a/this_version.md b/this_version.md index f83197b..f36188c 100644 --- a/this_version.md +++ b/this_version.md @@ -1,5 +1,5 @@ # Changelog -v1.13.14: +v1.13.15: -- Fixed target health updating infrequently on Classic. +- Fixed compatibility with WoW 9.2.5.