[BUG: Gamepad] Gamepad action bar disappears every other launch, even in Edit Mode (layout reconcile bug, build 70291)

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

  1. Turn on the gamepad UI.
  2. 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.
  3. Quit the game and launch it again: the gamepad action bar is gone, in Edit Mode too.
  4. Quit and launch again: the bar is back, with Compact off.
  5. 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.

13 Likes

I do hope this gets looked at, was expecting huge improvements to make for launch but instead we are downgrading.

3 Likes

At first I thought it was a bug related to an addon I’m working on. One of the features is moving the action bars on the right and making them a bit bigger.

It’s annoying as hell.

Can confirm the issue.

1 Like