In build 10.1.7.50793 opening a settings panel category that makes use of a canvas layout will break the settings panel, preventing users from switching between the "Game" and "AddOns" tab and not correctly updating the category list.
This block of code was added in build 40793 which assumes that all layout types have an EnumerateInitializers method. This however is only true for vertical layout categories, not canvas ones.
Message: ...terface/SharedXML/Settings/Blizzard_CategoryList.lua:96: attempt to call method 'EnumerateInitializers' (a nil value)
Time: Tue Aug 15 23:26:46 2023
Count: 1
Stack: ...terface/SharedXML/Settings/Blizzard_CategoryList.lua:96: attempt to call method 'EnumerateInitializers' (a nil value)
[string "@Interface/SharedXML/Settings/Blizzard_CategoryList.lua"]:96: in function `Init'
[string "@Interface/SharedXML/Scroll/ScrollUtil.lua"]:1159: in function `InitFrame'
[string "@Interface/SharedXML/Settings/Blizzard_CategoryList.lua"]:145: in function `initializer'
[string "@Interface/SharedXML/Scroll/ScrollBoxListView.lua"]:382: in function `InvokeInitializer'
[string "@Interface/SharedXML/Scroll/ScrollBoxListView.lua"]:391: in function `InvokeInitializers'
[string "@Interface/SharedXML/Scroll/ScrollBox.lua"]:718: in function `Update'
[string "@Interface/SharedXML/Scroll/ScrollBox.lua"]:192: in function `FullUpdateInternal'
[string "@Interface/SharedXML/Scroll/ScrollBox.lua"]:692: in function `FullUpdateInternal'
[string "@Interface/SharedXML/Scroll/ScrollBox.lua"]:146: in function `FullUpdate'
[string "@Interface/SharedXML/Scroll/ScrollBox.lua"]:663: in function <Interface/SharedXML/Scroll/ScrollBox.lua:662>
[string "=[C]"]: ?
[string "@Interface/SharedXML/CallbackRegistry.lua"]:178: in function <Interface/SharedXML/CallbackRegistry.lua:177>
...
[string "@Interface/SharedXML/CallbackRegistry.lua"]:178: in function <Interface/SharedXML/CallbackRegistry.lua:177>
[string "=[C]"]: ?
[string "@Interface/SharedXML/CallbackRegistry.lua"]:181: in function `TriggerEvent'
[string "@Interface/SharedXML/ButtonGroup.lua"]:165: in function <Interface/SharedXML/ButtonGroup.lua:156>
[string "=[C]"]: ?
[string "@Interface/SharedXML/CallbackRegistry.lua"]:178: in function <Interface/SharedXML/CallbackRegistry.lua:177>
[string "=[C]"]: ?
[string "@Interface/SharedXML/CallbackRegistry.lua"]:181: in function `TriggerEvent'
[string "@Interface/SharedXML/SelectableButton.lua"]:56: in function `SetSelected'
[string "@Interface/SharedXML/SelectableButton.lua"]:20: in function <Interface/SharedXML/SelectableButton.lua:19>
Locals: self = Button {
0 = <userdata>
OnEnter = <function> defined @Interface/SharedXML/Settings/Blizzard_CategoryList.lua:46
Label = FontString {
}
OnMouseUp = <function> defined @Interface/SharedXML/ButtonStateBehavior.lua:48
ElementDataMatches = <function> defined @Interface/SharedXML/Scroll/ScrollBoxListView.lua:105
OnMouseDown = <function> defined @Interface/SharedXML/ButtonStateBehavior.lua:40
SetOrderIndex = <function> defined @Interface/SharedXML/Scroll/ScrollBoxListView.lua:114
Texture = Texture {
}
OnDisable = <function> defined @Interface/SharedXML/ButtonStateBehavior.lua:56
Init = <function> defined @Interface/SharedXML/Settings/Blizzard_CategoryList.lua:87
UpdateState = <function> defined @Interface/SharedXML/Settings/Blizzard_CategoryList.lua:83
GetOrderIndex = <function> defined @Interface/SharedXML/Scroll/ScrollBoxListView.lua:110
GetData = <function> defined @Interface/SharedXML/Scroll/ScrollBoxListView.lua:96
GetElementData = <function> defined @Interface/SharedXML/Scroll/ScrollBoxListView.lua:96
NewFeature = Frame {
}
OnLeave = <function> defined @Interface/SharedXML/Settings/Blizzard_CategoryList.lua:52
OnLoad = <function> defined @Interface/SharedXML/Settings/Blizzard_CategoryList.lua:38
SetExpanded = <function> defined @Interface/SharedXML/Settings/Blizzard_CategoryList.lua:115
UpdateStateInternal = <function> defined @Interface/SharedXML/Settings/Blizzard_CategoryList.lua:58
SetSelected = <function> defined @Interface/SharedXML/Settings/Blizzard_CategoryList.lua:111
Toggle = Button {
}
}
initializer = <table> {
Factory = <function> defined @Interface/SharedXML/Scroll/ScrollUtil.lua:1153
GetTemplate = <function> defined @Interface/SharedXML/Scroll/ScrollUtil.lua:1144
Init = <function> defined @Interface/SharedXML/Scroll/ScrollUtil.lua:1140
IsTemplate = <function> defined @Interface/
In build 10.1.7.50793 opening a settings panel category that makes use of a canvas layout will break the settings panel, preventing users from switching between the "Game" and "AddOns" tab and not correctly updating the category list.
Test case
The test case addon in #460 can be used to reproduce this, and is attached here: Meorawr_StackedCategoriesBug.zip
https://github.com/Stanzilla/WoWUIBugs/assets/287102/2761e9f2-6bea-4cda-b105-76044490ac43
Issue
This block of code was added in build 40793 which assumes that all layout types have an EnumerateInitializers method. This however is only true for vertical layout categories, not canvas ones.