WoW:SecureHandlerClickTemplate

Revision as of 04:48, 15 August 2023 by Move page script (talk | contribs) (Move page script moved page SecureHandlerClickTemplate to SecureHandlerClickTemplate without leaving a redirect)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

SecureHandlerClickTemplate is one of the SecureHandler templates introduced in Patch 3.0. Those templates exist in order to allow addon code to execute within a restricted environment, where it may perform protected actions but has access only to a limited subset of the API. SecureHandlerClickTemplate executes snippets in response to OnClick widget handler invocations.

SnippetsEdit

The handler executes the following snippets in a restricted environment:

_onclick (self, button, down)
The snippet is executed when button is clicked.
self
Secure frame handle to the frame being clicked.
button
String - mouse button being clicked ("LeftButton", ...)
down
Boolean (1/nil) - If true-equivalent, the click is fired by a down-stroke, i.e. the button being pushed down. If false-equivalent, the click is fired by an up-stroke, i.e. the button being released.

ExampleEdit

Suppose we wanted to make a button that would show/hide multiple protected frames, even while in combat.

local frame = CreateFrame("BUTTON", "MyClickButton", UIParent, "SecureHandlerClickTemplate");
frame:SetAttribute("_onclick", [=[
 local show, i, ref = button == "LeftButton", 2, self:GetFrameRef("frame1");
 while ref do
  if show then ref:Show(); else ref:Hide(); end
  i, ref = i + 1, self:GetFrameRef("frame" .. i);
 end
]=]); 
frame:RegisterForClicks("AnyUp");
frame:SetFrameRef("frame1", PlayerFrame);
frame:SetFrameRef("frame2", TargetFrame);
-- ...

The _onclick snippet would get executed, check whether the click was a left-click, and, based on that, iterate through all "frameX" frame references on the button and show/hide them.