SecureHandlerClickTemplate and SecureHandlerDoubleClickTemplate are SecureHandlers which can perform protected actions in response to clicks, but only within a restricted environment that parses a string to perform protected actions using a limited subset of the API.
The templates each introduce a handler, _onclick or _ondoubleclick, with the following payload:
- table - Secure frame handle to the frame being clicked.
- string - Mouse button being clicked ("LeftButton", ...).
- boolean - True when the click is fired by a down-stroke; otherwise false.
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.