tullamods / Dominos

A main actionbar replacement
https://tullamods.com/dominos
BSD 3-Clause "New" or "Revised" License
79 stars 26 forks source link

9.1.5 possible conflict #591

Closed Talimar closed 2 years ago

Talimar commented 3 years ago

Getting this error in combat. Not sure if it's Dominos but thought I'd report it anyway.

1x [ADDON_ACTION_BLOCKED] AddOn ' ForceTaint_Strong ' tried to call the protected function 'MultiBarBottomRightButton4:Show()'. [string "@!BugGrabber\BugGrabber.lua"]:519: in function <!BugGrabber\BugGrabber.lua:519> [string "=[C]"]: in function Show' [string "@FrameXML\ActionButton.lua"]:348: in function <FrameXML\ActionButton.lua:332> [string "=[C]"]: in functionUpdate' [string "@FrameXML\ActionButton.lua"]:854: in function `OnEvent' [string "@FrameXML\ActionButton.lua"]:265: in function <FrameXML\ActionButton.lua:257>

Tuller commented 2 years ago

Without much context, its hard to actually diagnose these.

Talimar commented 2 years ago

Without much context, its hard to actually diagnose these.

It seems to happen the first time I engage in combat after logging in. after that it never occurs again. I can test more if you have any ideas.

Goranaws commented 2 years ago

Implementing the follow code in my UI seems to eliminate the error:

VehicleLeaveButton.NewShow = VehicleLeaveButton.Show VehicleLeaveButton.NewHide = VehicleLeaveButton.Hide MainMenuBar.NewSetScale = MainMenuBar.SetScale MainMenuBar.NewClearAllPointse = MainMenuBar.ClearAllPoints MainMenuBar.NewSetPoint = MainMenuBar.SetPoint MultiBarRight.NewSetShown = MultiBarRight.SetShown VehicleLeaveButton.Show = function() end MainMenuBar.SetScale = function() end MainMenuBar.ClearAllPoints = function() end MultiBarRight.SetShown = function() end MainMenuBar.SetPoint = function() end VehicleLeaveButton.Hide = function() end

Not the cleanest solution, but i think the bug arises from anything addon that touches a frame that is managed by the function "UIParent_ManageFramePositions" , located at Interface\FrameXML\UIParent.lua line 3474

Goranaws commented 2 years ago

Upon further investigation, any addon that touches a frame that the Default UI wants to relocate, must set that frame as user placed. the following seems to clear up the bug for me:

` local taintItems = { "MainMenuBar", "PlayerPowerBarAlt", "VehicleLeaveButton", "MultiBarRight", "MicroButtonAndBagsBar", "ObjectiveTrackerFrame", } for i, taintItem in pairs(taintItems) do local item = _G[taintItem] if item then item:SetMovable(true) item:SetUserPlaced(true) end end

for i = 1, 12 do
    local btn = _G["ActionButton"..i]
    if btn then
        btn:SetMovable(true)
        btn:SetUserPlaced(true)
    end
end

`

Tuller commented 2 years ago

You may want to see what your UI looks like when running that without Dominos enabled. I have a feeling you'll see stuff in weird places. SetUserPlaced tells the UI to save the positions of elements.

To resolve that, we'll want to add a logout event to revert what we've done (just thing:SetUserPlaced(false))

Goranaws commented 2 years ago

The core issue for this bug arises when any addon modifies a frame that is managed in file "Interface\FrameXML\UIParent.lua" line 3155; function FramePositionDelegate:UIParentManageFramePositions() or frames listed in the same file, in the table located at line 2517. However, these functions include checks for element:IsUserPlaced(). Which is why I think it will be necessary do do as you suggest.

Goranaws commented 2 years ago
local userPlaced,isUserPlaced = {}, {}

local function RegisterForUserPlaced(frameName)
    tinsert(userPlaced, frameName)
end

RegisterForUserPlaced("MainMenuBar")
RegisterForUserPlaced("PlayerPowerBarAlt")
RegisterForUserPlaced("MainMenuBarVehicleLeaveButton")
RegisterForUserPlaced("MultiBarRight")
RegisterForUserPlaced("MicroButtonAndBagsBar")
RegisterForUserPlaced("ObjectiveTrackerFrame")
RegisterForUserPlaced("TalkingHeadFrame")

local function RegisterUserPlaced(frameName)
    local element = _G[frameName]
    if element then
        isUserPlaced[frameName] = element
        element:SetMovable(true)
        element:SetUserPlaced(true)
    end
end

local function OnLogout()
    for frameName, element in pairs(isUserPlaced) do
        element:SetUserPlaced(false)
        element:SetMovable(false)
    end 
end

local function OnLogin()
    for i, frameName in pairs(userPlaced) do
        RegisterUserPlaced(frameName)
    end

    for i = 1, 12 do
        RegisterUserPlaced("ActionButton"..i)
    end
end
Tuller commented 2 years ago

It may be sufficient to just set MainMenuBar and MicroButtonAndBagsBar

JarshamDW commented 2 years ago

the latest update caused to mod not to work.

when I clicked a spell off an action bar the sound mutes the spell doesnt cast and I have to click someplace on the screen to get the sound working again

Goranaws commented 2 years ago

I encounter this bug regularly, across several addons. I'm beginning to wonder if this could somehow be a GameTooltip leak? I can never seem to figure what causes this taint leak, but I do know that GameTooltip touches nearly everything...