Did some more testing and came up with this:
Lua Code:
local AttributeChangedFrame = CreateFrame('frame', nil, UIParent, 'SecureHandlerAttributeTemplate')
for i = 1, 12 do
local button = _G['ActionButton'..i]
AttributeChangedFrame:SetFrameRef('ActionButton'..i, button)
end
for i = 1, 6 do
local overrideButton = _G['OverrideActionBarButton'..i]
AttributeChangedFrame:SetFrameRef('OverrideActionBarButton'..i, overrideButton)
end
AttributeChangedFrame:Execute([[
buttons = table.new()
for i = 1, 12 do
table.insert(buttons, self:GetFrameRef('ActionButton'..i))
end
overridebuttons = table.new()
for i = 1, 6 do
table.insert(overridebuttons, self:GetFrameRef('OverrideActionBarButton'..i))
end
]])
for i = 1, 6 do
local overrideButton = _G['OverrideActionBarButton'..i]
overrideButton:HookScript('OnAttributeChanged', function()
AttributeChangedFrame:Execute[[
for i = 1, 6 do
if not overridebuttons[i]:GetAttribute('statehidden') then
buttons[i]:SetAttribute('statehidden', false)
buttons[i]:Show()
else
buttons[i]:SetAttribute('statehidden', true)
buttons[i]:Hide()
end
end
]]
end)
local button = _G['ActionButton'..i]
button:HookScript('OnAttributeChanged', function()
AttributeChangedFrame:Execute[[
for i = 1, 12 do
if (not HasOverrideActionBar() and not HasVehicleActionBar() and buttons[i]:GetAttribute('statehidden')) then
buttons[i]:SetAttribute('statehidden', false)
buttons[i]:Show()
end
end
]]
end)
end
This works beautifully and causes 0 taint. HOWEVER, I'm nearly positive this could be way more optimized.