1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-14 11:35:35 +08:00

Fix #27105: Mod search box doesnt track external focus changes

In the Mod selection area, the search bar's focus could be changed by pressing TAB.
However, when clicking outside of the search bar, the focus would be killed but two TABs were required to get the focus back on the search bar.
This happened because the action of clicking in an empty area would trigger the search bar to change its appearence, but not its internal state.
In my solution, I made the OnClick function aware of the search bar's state, so it would not only change its appearance, but also its state.
Now, after clicking in an empty area, there is only needed one TAB to select the search box again, as expected.
This commit is contained in:
Mafalda Fernandes 2024-04-01 19:21:05 +01:00
parent ca525f6a91
commit 16276dfcd6

View File

@ -420,7 +420,7 @@ namespace osu.Game.Overlays.Mods
yield return new ColumnDimContainer(new ModPresetColumn
{
Margin = new MarginPadding { Right = 10 }
});
}, this);
}
yield return createModColumnContent(ModType.DifficultyReduction);
@ -438,7 +438,7 @@ namespace osu.Game.Overlays.Mods
column.Margin = new MarginPadding { Right = 10 };
});
return new ColumnDimContainer(column);
return new ColumnDimContainer(column, this);
}
private void createLocalMods()
@ -899,13 +899,17 @@ namespace osu.Game.Overlays.Mods
[Resolved]
private OsuColour colours { get; set; } = null!;
public ColumnDimContainer(ModSelectColumn column)
private ModSelectOverlay modSelectOverlayInstance;
public ColumnDimContainer(ModSelectColumn column, ModSelectOverlay modSelectOverlay)
{
AutoSizeAxes = Axes.X;
RelativeSizeAxes = Axes.Y;
Child = Column = column;
column.Active.BindTo(Active);
this.modSelectOverlayInstance = modSelectOverlay;
}
[BackgroundDependencyLoader]
@ -953,7 +957,7 @@ namespace osu.Game.Overlays.Mods
RequestScroll?.Invoke(this);
// Killing focus is done here because it's the only feasible place on ModSelectOverlay you can click on without triggering any action.
Scheduler.Add(() => GetContainingInputManager().ChangeFocus(null));
modSelectOverlayInstance.setTextBoxFocus(false);
return true;
}