Fix(PAB): right click cancel aura not working - #1369
Merged
EllesmereGaming merged 2 commits intoAug 12, 2026
Conversation
ApplyStyleToRegions only ever turned clicks OFF for styles without cancelButtons, and SetCancelAuraButtons ran at button creation only. A style that GAINED cancelButtons on live buttons -- PAB's per-bar "Right-Click to Cancel" toggled off and back on, or a profile switch into a profile that has it on -- therefore left the bar click-through until the next /reload, with the right-click landing on the container below the icon. The click channel is symmetric now: clicks are re-enabled for buttons we ourselves turned off (d.akClickOff stamp) and the cancel token is re-applied change-guarded (d.akCancel stamp), both pcall-wrapped with the same deferredRestyles fallback the tooltip/motion neighbours use for the secret-value lockdown. The creation-time SetCancelAuraButtons call is now stamp-guarded and only fires if the restyle call was denied. Also documents at PAB's cancelButtons call site why the token stays "RightButtonUp": for some players the right-button press falls through to WorldFrame, mouselook captures the mouse and the up never reaches the button. Blizzard's legacy aura icons consume that press; the intrinsic AuraButton denies tainted code the input aspects that would do the same (Blizzard_AuraButton.xml: ForbiddenAspect AlwaysPropagateInput / ScriptedInput), and no API re-grants a denied aspect. "RightButtonDown" works around it but is rejected on purpose -- a right-click-drag starting on an icon would cancel that buff on press -- and registering both phases is worse still, since CanCancelAuraOnClick matches any registered token and the engine may re-assign the button's aura instance between the two OnClicks.
…ncel
Field-reported 2026-08-12, twice independently: right-clicking a player buff
to cancel it sometimes does nothing, as if the click never landed. One
reporter confirmed the trigger via /console CursorFreelookStartDelta 0 --
the CVar controls how far the cursor must move before a held mouse button
counts as camera freelook instead of a click. At 0 (zero movement required),
any right-click on an aura icon is claimed for freelook before the release
reaches the button -- the click is real, the button just never sees it.
Blizzard's own shipped default is 0.001, not 0; players land on 0 via
third-party "camera feel" addons/macros (a dedicated community addon,
CursorDeltaFix, does exactly this: SetCVar("CursorFreelookStartDelta", 0)) or
a manual console tweak, never from anything EllesmereUI does.
SyncCancelCVar() repairs this, not nudges it: it only ever touches the CVar
when caught sitting at the pathological 0, restoring it to Blizzard's own
0.001 -- never raised past that, and never touched at all if it sits anywhere
else, including a deliberately-tuned non-zero value. It only runs while some
right-click-cancelable buff surface is actually live (the default Buffs bar,
an enabled custom buff bar, or the classic Unit Frames player-buffs display),
so a player who never uses the feature never has this CVar touched at all.
Hooked into the three points that already own PAB's live style state:
CreateBars (login), RestyleBars (default-bar settings changes), and
ReloadCustomBuffBarImpl (custom-bar creation/changes).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
Fixes player buffs on the Player Aura Bars (and classic Unit Frames player buffs) sometimes staying un-cancelable via right-click, in two independent parts.
Click channel repair (AuraKit). AuraKit's
ApplyStyleToRegionsonly ever turned the click channel OFF (for styles withoutcancelButtons, the nameplate click-eater guard), andSetCancelAuraButtonsran once at button creation only. A style that GAINEDcancelButtonson already-created buttons therefore never got them back: toggling a Player Aura Bar's per-bar "Right-Click to Cancel" off and on again, or switching into a profile that has it on, left that bar's buffs permanently un-cancelable until the next/reload. The click channel is symmetric now -- clicks are re-enabled for buttons AuraKit itself turned off (d.akClickOffstamp) and the cancel token is re-applied change-guarded (d.akCancelstamp), bothpcall-wrapped with the samedeferredRestylesfallback the tooltip/motion passes next to them already use. Covers both consumers of the cancel style, Player Aura Bars and the Unit Frames player buffs.CursorFreelookStartDelta repair (Player Aura Bars). A second, independent trigger for the same symptom, confirmed by two separate field reports: the client CVar
CursorFreelookStartDeltacontrols how far the cursor must move before a held mouse button counts as camera freelook instead of a click. At0(zero movement required), any right-click on an aura icon is claimed for freelook before the release reaches the button -- the click is real, the button just never sees it. Blizzard's own shipped default is0.001, not0; players land on0via third-party "camera feel" addons/macros (a dedicated community addon, CursorDeltaFix, does exactly this:SetCVar("CursorFreelookStartDelta", 0)) or a manual console tweak, never from anything EllesmereUI does.SyncCancelCVar()repairs this, it does not nudge it: the CVar is only ever touched when caught sitting at the pathological0, restored to Blizzard's own0.001-- never raised past that, and never touched at all if it sits anywhere else, including a deliberately-tuned non-zero value. It only runs while some right-click-cancelable buff surface is actually live (the default Buffs bar, an enabled custom buff bar, or the classic Unit Frames player-buffs display), so a player who never uses the feature never has this CVar touched at all. Hooked into the three points that already own PAB's live style state:CreateBars(login),RestyleBars(default-bar settings changes), andReloadCustomBuffBarImpl(custom-bar creation/changes).A deliberately rejected alternative for the same symptom: switching the cancel click token from
"RightButtonUp"to"RightButtonDown"also works around a related but separate WorldFrame-mouselook interaction, but was NOT taken -- a right-click-drag starting on an aura icon would then cancel that buff on press. The token stays"RightButtonUp", matching Blizzard's ownAuraButtonMixin.How was it tested?
Static analysis and
luac5.1 -pon both changed files. Blizzard behaviour was verified against the shipped source rather than from memory:AuraButtonSharedMixin:SetCancelAuraButtons(string token,RegisterForClicks),AuraButtonPrivateMixin:OnClick_Intrinsic/CanCancelAuraOnClick(plain OnClick, matches any registered token), theForbiddenAspectsblock on the intrinsicAuraButton, andCursorFreelookStartDelta's Blizzard-shipped default (0.001, cross-checked against the client's canonical cvar list).Screenshots
N/A -- no visual change.
Checklist
/reload, and the CVar repair only ever touches players already sitting at the broken0value while using a feature that needs the clickSyncCancelCVarshort-circuits immediately if PAB is disabled or no cancel-capable surface is live; the click-channel stamps add zero extra button calls on a steady-state restyle passHookScript/hooksecurefunconly, neverSetScripton Blizzard frames -- the click-channel state lives in AuraKit's existing weak-keyed side table (bd); the CVar repair calls only the publicGetCVar/SetCVarAPI, no frame writes