Stanzilla / WoWUIBugs

World of Warcraft UI Bug Tracker
166 stars 7 forks source link

Settings canvas categories brick the settings panel #462

Closed Meorawr closed 1 year ago

Meorawr commented 1 year ago

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

  1. Open the settings panel.
  2. Navigate to the "AddOns" tab. You'll receive a script error at this point.
  3. Attempt to change between the "Game" and "AddOns" tab. The category list will not update accordingly.

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.

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/
Meorawr commented 1 year ago

Fixed in 10.1.7.51059.