Fixing this eliminates the need for hooking SetPoint on the unit frames and eliminates the whole problem.
The best fix I have found is to set an OnAttributeChanged script on the headers, and if the attribute being changed is one that affects the points, I clear the points on the child unit frames:
local function GridLayout_OnAttributeChanged(self, name, value) if name == "point" or name == "unitspercolumn" or name == "columnanchorpoint" then self:ClearPoints() if self:IsVisible() then SecureGroupHeader_Update(self) end end end
and of course:
function GridLayout.prototype:ClearPoints() local count = 1 local uframe = self:GetAttribute("child" .. count) while uframe do uframe:ClearAllPoints() count = count + 1 uframe = self:GetAttribute("child" .. count) end end
I set the script for each header in GridLayout:CreateHeader()
I have to run to catch a plane now, so I can't do a whole ton of testing or anything now. I'll a very thorough look at it when I get home tomorrow.
I do hope this is helpful.