tukui-org / ElvUI

User Interface replacement AddOn for World of Warcraft.
https://tukui.org
Other
468 stars 158 forks source link

Allow Elvui to work with GSE: Sequences, Variables, Macros Addon #1353

Closed justinltodd closed 1 month ago

justinltodd commented 1 month ago

Troubleshooting Steps

Does not allow keybind or utilzing the action bar https://www.curseforge.com/wow/addons/gse-gnome-sequencer-enhanced-advanced-macros

Describe the expected behavior and what actually happened?

No response

Reproducing the issue.

No response

Lua Errors

No response

Verification Steps

1Botanica1 commented 1 month ago

That would be for GSE to be set up to work with ElvUI

I can see they have a ticket for it https://github.com/TimothyLuke/GSE-Advanced-Macro-Compiler/issues/1628

TimothyLuke commented 1 month ago

In the past, users would drag a macro to the action bar, which would /click the GSE Button. With TWW's macro changes, that is no longer possible. On normal action bars, GSE can override the button, essentially changing the button to "click" the GSE Sequence. This works with ElvUI until you take off in flight or the bar changes, and then when it reverts to the normal state, it wipes the click modification.

To overcome this with Elv's action bars, GSE registers a custom action onto the "1" state of the LibActionButton. This allows the ActionButton to pass through directly to the GSE Button and mimics the Macro Feedback functions before TWW. (1 min demo: https://github.com/user-attachments/assets/fe885f67-b99a-4e77-9fdc-44960789b407) This bind functionality is specific to ElvUI and works, but it has one issue I cannot resolve.

I achieve the bind via

_G[Button]:SetState(
   "1",
   "custom",
   {
       func = function(self)
           self:SetAttribute("type", "click")
           self:SetAttribute("clickbutton", _G[OtherButton])
        end,
        tooltip = "GSE: " .. OtherButton,
        texture = "Interface\\Addons\\GSE_GUI\\Assets\\GSE_Logo_Dark_512.blp"
    })

Where Button is ElvUI_BarNButtonM and OtherButton is a GSE Sequence. This works for all cases except if you dismount in combat taint prevention blocks the SetAttribute commands from func(). From pulling apart LibActionButton and Elv's code calling it, I haven't been able to identify a way to set this securely. I assume something special needs to be done on the LibActionButton end.

As a short-term fix I have changed func to be

                    func = function(self)
                        if not InCombatLockdown() then
                            self:SetAttribute("type", "click")
                            self:SetAttribute("clickbutton", _G[Sequence])
                        end
                    end,

This prevents the following error, but the button won't reset to a functioning state till combat is complete.

1x [ADDON_ACTION_BLOCKED] AddOn '*** TaintForced ***' tried to call the protected function 'ElvUI_Bar1Button2:SetAttribute()'.
[string "@!BugGrabber/BugGrabber.lua"]:485: in function <!BugGrabber/BugGrabber.lua:485>
[string "=[C]"]: in function `SetAttribute'

But any insight would be greatly appreciated.

TimothyLuke commented 1 month ago

This function from GSE's end was shipped in GSE 3.2.14 so this ticket could be closed.