Rework blocked menu options for 9.2.5

Since 9.2.5 completely re-worked UnitPopupMenus, IceHUD's "Set Focus" right-click menu option overrides were broken. This restores the override so that it can still suppress the tainted functionality.

Additionally, it turns out that having Clique installed replaces this entire thing somehow and makes Set Focus et al function (with IceHUD's ClickCastFrames registration). I don't know what that magic is about, but none of this munging happens and the tainted paths work fine. Interesting.

Fixes wowace ticket #319
This commit is contained in:
Parnic
2022-06-05 23:30:09 -05:00
parent 9500bdf393
commit d424afdab1
3 changed files with 151 additions and 82 deletions

View File

@ -44,6 +44,8 @@ IceHUD.validBarList = { "Bar", "HiBar", "RoundBar", "ColorBar", "RivetBar", "Riv
"BloodGlaives", "ArcHUD", "FangRune", "DHUD", "CleanCurvesOut", "CleanTank", "PillTank", "GemTank" } "BloodGlaives", "ArcHUD", "FangRune", "DHUD", "CleanCurvesOut", "CleanTank", "PillTank", "GemTank" }
IceHUD.validCustomModules = {Bar="Buff/Debuff watcher", Counter="Buff/Debuff stack counter", CD="Cooldown bar", Health="Health bar", Mana="Mana bar", CounterBar="Stack count bar"} IceHUD.validCustomModules = {Bar="Buff/Debuff watcher", Counter="Buff/Debuff stack counter", CD="Cooldown bar", Health="Health bar", Mana="Mana bar", CounterBar="Stack count bar"}
IceHUD_UnitFrame_DropDown = CreateFrame("Frame", "IceHUD_UnitFrame_DropDown", UIParent, "UIDropDownMenuTemplate")
--@debug@ --@debug@
IceHUD.optionsLoaded = true IceHUD.optionsLoaded = true
--@end-debug@ --@end-debug@
@ -684,14 +686,17 @@ function IceHUD:GetIsInLFGGroup()
return IsInLFGGroup return IsInLFGGroup
end end
local BLACKLISTED_UNIT_MENU_OPTIONS = {}
if UnitPopupButtons then if UnitPopupButtons then
local BLACKLISTED_UNIT_MENU_OPTIONS = { BLACKLISTED_UNIT_MENU_OPTIONS = {
SET_FOCUS = "ICEHUD_SET_FOCUS", SET_FOCUS = "ICEHUD_SET_FOCUS",
CLEAR_FOCUS = "ICEHUD_CLEAR_FOCUS", CLEAR_FOCUS = "ICEHUD_CLEAR_FOCUS",
PET_DISMISS = "ICEHUD_PET_DISMISS",
LOCK_FOCUS_FRAME = true, LOCK_FOCUS_FRAME = true,
UNLOCK_FOCUS_FRAME = true, UNLOCK_FOCUS_FRAME = true,
} }
if select(2, UnitClass("player")) ~= "WARLOCK" then
BLACKLISTED_UNIT_MENU_OPTIONS[PET_DISMISS] = "ICEHUD_PET_DISMISS"
end
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),
@ -710,9 +715,43 @@ if UnitPopupButtons then
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,
} }
elseif UnitPopupSetFocusButtonMixin then
IceHUDUnitPopupSetFocusButtonMixin = CreateFromMixins(UnitPopupButtonBaseMixin)
function IceHUDUnitPopupSetFocusButtonMixin:GetText()
return L["Type %s to set focus"]:format(SLASH_FOCUS1)
end
function IceHUDUnitPopupSetFocusButtonMixin:OnClick()
end
local munged_unit_menus = {} IceHUDUnitPopupClearFocusButtonMixin = CreateFromMixins(UnitPopupButtonBaseMixin)
local function munge_unit_menu(menu) function IceHUDUnitPopupClearFocusButtonMixin:GetText()
return L["Type %s to clear focus"]:format(SLASH_CLEARFOCUS1)
end
function IceHUDUnitPopupClearFocusButtonMixin:OnClick()
end
IceHUDUnitPopupPetDismissButtonMixin = CreateFromMixins(UnitPopupButtonBaseMixin)
function IceHUDUnitPopupPetDismissButtonMixin:GetText()
return L["Use your Dismiss Pet spell to dismiss a pet"]
end
function IceHUDUnitPopupPetDismissButtonMixin:CanShow()
return UnitPopupPetDismissButtonMixin:CanShow()
end
function IceHUDUnitPopupPetDismissButtonMixin:OnClick()
end
BLACKLISTED_UNIT_MENU_OPTIONS[SET_FOCUS] = IceHUDUnitPopupSetFocusButtonMixin
BLACKLISTED_UNIT_MENU_OPTIONS[CLEAR_FOCUS] = IceHUDUnitPopupClearFocusButtonMixin
BLACKLISTED_UNIT_MENU_OPTIONS[LOCK_FOCUS_FRAME] = true
BLACKLISTED_UNIT_MENU_OPTIONS[UNLOCK_FOCUS_FRAME] = true
if select(2, UnitClass("player")) ~= "WARLOCK" then
BLACKLISTED_UNIT_MENU_OPTIONS[PET_DISMISS] = IceHUDUnitPopupPetDismissButtonMixin
end
end
local munged_unit_menus = {}
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
@ -730,13 +769,22 @@ if UnitPopupButtons then
end end
local found = false local found = false
local _, v if data.GetMenuButtons then
local btns = data.GetMenuButtons()
for i=1, #btns do
if BLACKLISTED_UNIT_MENU_OPTIONS[btns[i]:GetText()] then
found = true
break
end
end
else
for _, v in ipairs(data) do for _, v in ipairs(data) do
if BLACKLISTED_UNIT_MENU_OPTIONS[v] then if BLACKLISTED_UNIT_MENU_OPTIONS[v] then
found = true found = true
break break
end end
end end
end
if not found then if not found then
-- nothing to remove or add, we're all fine here. -- nothing to remove or add, we're all fine here.
@ -745,26 +793,41 @@ if UnitPopupButtons then
end end
local new_data = {} local new_data = {}
if data.GetMenuButtons then
local new_buttons_list = {}
local btns = data.GetMenuButtons()
for i=1, #btns do
local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[btns[i]:GetText()]
if not blacklisted then
new_buttons_list[#new_buttons_list+1] = btns[i]
elseif blacklisted ~= true then
new_buttons_list[#new_buttons_list+1] = blacklisted
end
end
new_data = data
function new_data:GetMenuButtons()
return new_buttons_list
end
else
for _, v in ipairs(data) do for _, v in ipairs(data) do
local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[v] 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 if not blacklisted then
new_data[#new_data+1] = v new_data[#new_data+1] = v
elseif blacklisted ~= true then elseif blacklisted ~= true then
new_data[#new_data+1] = blacklisted new_data[#new_data+1] = blacklisted
end end
end end
end
local new_menu_name = "ICEHUD_" .. menu local new_menu_name = "ICEHUD_" .. menu
UnitPopupMenus[new_menu_name] = new_data UnitPopupMenus[new_menu_name] = new_data
munged_unit_menus[menu] = new_menu_name munged_unit_menus[menu] = new_menu_name
return new_menu_name return new_menu_name
end end
IceHUD.MungeUnitMenu = munge_unit_menu IceHUD.MungeUnitMenu = munge_unit_menu
local function figure_unit_menu(unit) local function figure_unit_menu(unit)
if unit == "focus" then if unit == "focus" then
return "FOCUS" return "FOCUS"
end end
@ -797,15 +860,14 @@ if UnitPopupButtons then
end end
return "PLAYER" return "PLAYER"
end end
IceHUD_UnitFrame_DropDown = CreateFrame("Frame", "IceHUD_UnitFrame_DropDown", UIParent, "UIDropDownMenuTemplate") if UnitPopupFrames then
if UnitPopupFrames then
UnitPopupFrames[#UnitPopupFrames+1] = "IceHUD_UnitFrame_DropDown" UnitPopupFrames[#UnitPopupFrames+1] = "IceHUD_UnitFrame_DropDown"
end 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
@ -815,5 +877,4 @@ if UnitPopupButtons 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.14.2:
- Restored right-click menus on Info and Health bars.
v1.13.14.1: v1.13.14.1:
- Restored guard around array that doesn't exist on Classic clients. - Restored guard around array that doesn't exist on Classic clients.

View File

@ -1,5 +1,9 @@
# Changelog # Changelog
v1.13.14.2:
- Restored right-click menus on Info and Health bars.
v1.13.14.1: v1.13.14.1:
- Restored guard around array that doesn't exist on Classic clients. - Restored guard around array that doesn't exist on Classic clients.