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.
The handler executes the following snippets in a restricted environment:
- _onclick (self, button, down)
- The snippet is executed when button is clicked.
- Secure frame handle to the frame being clicked.
- String - mouse button being clicked ("LeftButton", ...)
- 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.
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.