ElvUI WindTools

ElvUI WindTools

3M Downloads

关于 Modules/Chat/RightClickMenu.lua

someblu opened this issue · 7 comments

commented

当前,人物右键菜单的构建过程采用的代码为

-- 人物右键菜单
-- 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

commented

我放弃了。。试了各种办法,还是只有用UIDropDownMenu_AddButton去修改下拉菜单的时候才能设置焦点。网上有说是暴雪的问题的,案例1案例2。明天再研究下怎么用acegui实现这个功能。

commented

而后我还发现,关闭举报菜单的功能已经不再需要了,举报菜单能一直正常显示了。

commented

关闭举报菜单 功能还是要的,我试了下会报错,主要原因是ElvUI会留存之前聊天记录的话暴雪的举报会找不到这个实际玩家。

commented

我刚试了下,应该不行的,就算改了还是会报Ace无法调用保护函数的错。

commented

我这是用UIDropDownMenu_AddButton添加的话无报错,用table.insert(UnitPopupMenus[])添加是会报错的,你是说这个么。

commented

是的 我一直把他当table在操作

commented

根据UnitPopup.lua中的这段代码,我修改了之前的禁用举报功能,在最新的commit中临时修复了C_ChatInfo.CanReportPlayer(playerLocation)的调用错误。