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
This commit is contained in:
Parnic
2022-06-01 08:29:39 -05:00
parent 47931922bd
commit 82db70969a
3 changed files with 121 additions and 117 deletions

View File

@ -684,134 +684,134 @@ function IceHUD:GetIsInLFGGroup()
return IsInLFGGroup return IsInLFGGroup
end end
local BLACKLISTED_UNIT_MENU_OPTIONS = { if UnitPopupButtons then
SET_FOCUS = "ICEHUD_SET_FOCUS", local BLACKLISTED_UNIT_MENU_OPTIONS = {
CLEAR_FOCUS = "ICEHUD_CLEAR_FOCUS", SET_FOCUS = "ICEHUD_SET_FOCUS",
PET_DISMISS = "ICEHUD_PET_DISMISS", CLEAR_FOCUS = "ICEHUD_CLEAR_FOCUS",
LOCK_FOCUS_FRAME = true, PET_DISMISS = "ICEHUD_PET_DISMISS",
UNLOCK_FOCUS_FRAME = true, LOCK_FOCUS_FRAME = true,
} UNLOCK_FOCUS_FRAME = true,
}
UnitPopupButtons["ICEHUD_SET_FOCUS"] = { UnitPopupButtons["ICEHUD_SET_FOCUS"] = {
text = L["Type %s to set focus"]:format(SLASH_FOCUS1), 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."], tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."],
dist = 0, dist = 0,
} }
UnitPopupButtons["ICEHUD_CLEAR_FOCUS"] = { UnitPopupButtons["ICEHUD_CLEAR_FOCUS"] = {
text = L["Type %s to clear focus"]:format(SLASH_CLEARFOCUS1), 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."], tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."],
dist = 0, dist = 0,
} }
UnitPopupButtons["ICEHUD_PET_DISMISS"] = { UnitPopupButtons["ICEHUD_PET_DISMISS"] = {
text = L["Use your Dismiss Pet spell to dismiss a pet"], 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."], tooltipText = L["Blizzard currently does not provide a proper way to right-click dismiss a pet with custom unit frames."],
dist = 0, dist = 0,
} }
local munged_unit_menus = {} local munged_unit_menus = {}
local function munge_unit_menu(menu) local function munge_unit_menu(menu)
local result = munged_unit_menus[menu] local result = munged_unit_menus[menu]
if result then if result then
return result 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
end end
end
if not found then if not UnitPopupMenus then
-- nothing to remove or add, we're all fine here. munged_unit_menus[menu] = menu
munged_unit_menus[menu] = menu return 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 end
if not blacklisted then
new_data[#new_data+1] = v local data = UnitPopupMenus[menu]
elseif blacklisted ~= true then if not data then
new_data[#new_data+1] = blacklisted munged_unit_menus[menu] = menu
return menu
end 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 end
local new_menu_name = "ICEHUD_" .. menu IceHUD.MungeUnitMenu = munge_unit_menu
UnitPopupMenus[new_menu_name] = new_data local function figure_unit_menu(unit)
munged_unit_menus[menu] = new_menu_name if unit == "focus" then
return new_menu_name return "FOCUS"
end end
IceHUD.MungeUnitMenu = munge_unit_menu
local function figure_unit_menu(unit) if UnitIsUnit(unit, "player") then
if unit == "focus" then return "SELF"
return "FOCUS" 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 end
if UnitIsUnit(unit, "player") then IceHUD_UnitFrame_DropDown = CreateFrame("Frame", "IceHUD_UnitFrame_DropDown", UIParent, "UIDropDownMenuTemplate")
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
UnitPopupFrames[#UnitPopupFrames+1] = "IceHUD_UnitFrame_DropDown" UnitPopupFrames[#UnitPopupFrames+1] = "IceHUD_UnitFrame_DropDown"
end
IceHUD.DropdownUnit = nil IceHUD.DropdownUnit = nil
UIDropDownMenu_Initialize(IceHUD_UnitFrame_DropDown, function() UIDropDownMenu_Initialize(IceHUD_UnitFrame_DropDown, function()
if not IceHUD.DropdownUnit then if not IceHUD.DropdownUnit then
return return
end end
local menu, id = figure_unit_menu(IceHUD.DropdownUnit) local menu, id = figure_unit_menu(IceHUD.DropdownUnit)
if menu then if menu then
menu = IceHUD.MungeUnitMenu(menu) menu = IceHUD.MungeUnitMenu(menu)
UnitPopup_ShowMenu(IceHUD_UnitFrame_DropDown, menu, IceHUD.DropdownUnit, nil, id) UnitPopup_ShowMenu(IceHUD_UnitFrame_DropDown, menu, IceHUD.DropdownUnit, nil, id)
end end
end, "MENU", nil) end, "MENU", nil)
end

View File

@ -1,5 +1,9 @@
# Changelog # Changelog
v1.13.15:
- Fixed compatibility with WoW 9.2.5.
v1.13.14: v1.13.14:
- Fixed target health updating infrequently on Classic. - Fixed target health updating infrequently on Classic.

View File

@ -1,5 +1,5 @@
# Changelog # Changelog
v1.13.14: v1.13.15:
- Fixed target health updating infrequently on Classic. - Fixed compatibility with WoW 9.2.5.