Build: 1.60.1.70291 (the patch that moved the gamepad action bar’s settings into Edit Mode)
Setup: gamepad UI on, a custom Edit Mode layout (for example to turn on Compact)
What happens
Since this patch, the gamepad action bar disappears completely every other time the game is launched. It is not shown anywhere, not even in Edit Mode (it can’t be selected there), and a /reload doesn’t bring it back. On the next launch it comes back, but with its default settings (Compact off). On the launch after that it disappears again, and so on.
Steps to reproduce
- Turn on the gamepad UI.
- In Edit Mode, use a custom layout (a new one, or a copy of the Gamepad layout), select the gamepad action bar, turn on Compact, save.
- Quit the game and launch it again: the gamepad action bar is gone, in Edit Mode too.
- Quit and launch again: the bar is back, with Compact off.
- Turn Compact on again and relaunch: it is gone again.
Expected
The gamepad action bar keeps its place and its settings (Compact) from one launch to the next.
Cause (in the default UI code)
Blizzard_EditMode/Shared/EditModeManager.lua, EditModeManagerFrameMixin:ReconcileLayouts():
if (layoutInfo.interfaceStyle == Enum.InputDeviceInterfaceType.Gamepad) and self:ReconcileWithGamepad(layoutInfo) then
somethingChanged = true;
elseif self:ReconcileWithModern(layoutInfo) then
somethingChanged = true;
end
When a gamepad layout is already up to date, ReconcileWithGamepad returns false, so the elseif runs ReconcileWithModern on that gamepad layout. The modern system map has no GamepadMainActionBar system, so the bar’s system is removed from the layout (and the modern systems are added), and C_EditMode.SaveLayouts saves it. UpdateSystem then hides the bar, since the active layout no longer holds its system. On the next launch the layout is out of date again, ReconcileWithGamepad puts the system back with its default settings, hence the alternation.
A possible fix: never run the modern reconcile on a gamepad layout.
if layoutInfo.interfaceStyle == Enum.InputDeviceInterfaceType.Gamepad then
if self:ReconcileWithGamepad(layoutInfo) then
somethingChanged = true;
end
elseif self:ReconcileWithModern(layoutInfo) then
somethingChanged = true;
end
Evidence
Logs/EditMode.log: the saved layout data alternates from one launch to the next, with the gamepad bar’s entry (30 -1 1 7 7 UIParent 0.0 110.0) present after one launch and missing after the next.
Workaround
Use the default Gamepad layout (not a copy), without Compact. Or, when the bar is missing, quit and relaunch the game: it comes back, without Compact.