关于 Modules/Chat/RightClickMenu.lua
someblu opened this issue · 7 comments
当前,人物右键菜单的构建过程采用的代码为
-- 人物右键菜单
-- for _, unit in pairs{"SELF","PLAYER","PARTY","RAID_PLAYER"} do
-- for _, value in pairs{"ARMORY","NAME_COPY"} do
-- tinsert(UnitPopupMenus[unit], 4, value)
-- end
-- end
-- need to fix position problems
hooksecurefunc("UnitPopup_ShowMenu", function(dropdownMenu, which, unit, name, userData)
if (UIDROPDOWNMENU_MENU_LEVEL == 1 and unit and (unit == "target" or string.find(unit, "party"))) then
local info = UIDropDownMenu_CreateInfo()
info.func = popupClick
info.notCheckable = true
if (UnitIsPlayer(unit)) then
info.text = UnitPopupButtonsExtra["ARMORY"]
info.arg1 = {value="ARMORY",unit=unit}
UIDropDownMenu_AddButton(info)
end
info.text = UnitPopupButtonsExtra["NAME_COPY"]
info.arg1 = {value="NAME_COPY",unit=unit}
UIDropDownMenu_AddButton(info)
end
end)
如果采用动态添加的方式(未注释片段),那么按钮将会添加于最下方,位于取消键下方,有点不合设计规范。而如果采用静态添加的方式(注释片段),虽然能自定义按钮的位置,但会使整个dropdown menu被判定为insecure,从而无法调用被保护函数(设置焦点、取消焦点等)。
我研究了下FriendsMenuXP的代码,发现它是隐藏了自带框架,重新创建了一个自有框架,并设置相关的attribute使之能被判定为secure。
所以想请教下,是否有函数能修改已创建按钮(或者是UnitPopupMenus中对应键值的按钮)的attribute
我这是用UIDropDownMenu_AddButton添加的话无报错,用table.insert(UnitPopupMenus[])添加是会报错的,你是说这个么。
根据UnitPopup.lua中的这段代码,我修改了之前的禁用举报功能,在最新的commit中临时修复了C_ChatInfo.CanReportPlayer(playerLocation)的调用错误。