From 3557207609ce1b64caa1e5bd9cb3c4eabdde0d1b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 4 Aug 2025 17:33:05 +0900 Subject: [PATCH] Fix context menu not working due to too much blocking --- osu.Game/Graphics/InputBlockingContainer.cs | 2 + .../SelectV2/BeatmapLeaderboardWedge.cs | 43 +++++++++++-------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/osu.Game/Graphics/InputBlockingContainer.cs b/osu.Game/Graphics/InputBlockingContainer.cs index f652dc8850..dedf328642 100644 --- a/osu.Game/Graphics/InputBlockingContainer.cs +++ b/osu.Game/Graphics/InputBlockingContainer.cs @@ -8,6 +8,8 @@ namespace osu.Game.Graphics { /// /// A simple container which blocks input events from travelling through it. + /// + /// Note that this will block right clicks as well. Special care needs to be taken to not break context menus from displaying. /// public partial class InputBlockingContainer : Container { diff --git a/osu.Game/Screens/SelectV2/BeatmapLeaderboardWedge.cs b/osu.Game/Screens/SelectV2/BeatmapLeaderboardWedge.cs index 0b845474dd..d34c202640 100644 --- a/osu.Game/Screens/SelectV2/BeatmapLeaderboardWedge.cs +++ b/osu.Game/Screens/SelectV2/BeatmapLeaderboardWedge.cs @@ -149,27 +149,33 @@ namespace osu.Game.Screens.SelectV2 Children = new Drawable[] { new WedgeBackground(), - new Container + // Required because wedge background blocks input from passing through + // to the main context menu container above. + new OsuContextMenuContainer { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, Shear = -OsuGame.SHEAR, - Padding = new MarginPadding { Top = 5f, Bottom = 5f, Left = 70f, Right = 10f }, - Children = new Drawable[] + RelativeSizeAxes = Axes.Both, + Child = new Container { - personalBestText = new OsuSpriteText + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Padding = new MarginPadding { Top = 5f, Bottom = 5f, Left = 70f, Right = 10f }, + Children = new Drawable[] { - Colour = colourProvider.Content2, - Font = OsuFont.Style.Caption1.With(weight: FontWeight.SemiBold), - }, - personalBestScoreContainer = new Container - { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Margin = new MarginPadding { Top = 20f }, - }, - } - }, + personalBestText = new OsuSpriteText + { + Colour = colourProvider.Content2, + Font = OsuFont.Style.Caption1.With(weight: FontWeight.SemiBold), + }, + personalBestScoreContainer = new Container + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Margin = new MarginPadding { Top = 20f }, + }, + } + }, + } }, }, placeholderContainer = new Container @@ -241,7 +247,8 @@ namespace osu.Game.Screens.SelectV2 // For now, we forcefully refresh to keep things simple. // In the future, removing this requirement may be deemed useful, but will need ample testing of edge case scenarios // (like returning from gameplay after setting a new score, returning to song select after main menu). - leaderboardManager.FetchWithCriteria(new LeaderboardCriteria(fetchBeatmapInfo, fetchRuleset, Scope.Value, FilterBySelectedMods.Value ? mods.Value.ToArray() : null, fetchSorting), forceRefresh: true); + leaderboardManager.FetchWithCriteria(new LeaderboardCriteria(fetchBeatmapInfo, fetchRuleset, Scope.Value, FilterBySelectedMods.Value ? mods.Value.ToArray() : null, fetchSorting), + forceRefresh: true); if (!initialFetchComplete) {