From b5696f97a072439946e0af495e9f4191d864fad7 Mon Sep 17 00:00:00 2001 From: Zihad Date: Tue, 4 Mar 2025 03:05:03 +0600 Subject: [PATCH 1/9] Show current beatmap info in window title --- osu.Game/OsuGame.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index d23d27c89e..3b55c320b3 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -828,6 +828,8 @@ namespace osu.Game { beatmap.OldValue?.CancelAsyncLoad(); beatmap.NewValue?.BeginAsyncLoad(); + + Host.Window.Title = $"{Name} - {beatmap.NewValue.BeatmapInfo.GetDisplayTitleRomanisable(true, false)}"; } private void modsChanged(ValueChangedEvent> mods) From 2abe75629eefb21f53ab4144210c7e3cf30ce8fc Mon Sep 17 00:00:00 2001 From: Zihad Date: Tue, 4 Mar 2025 18:28:03 +0600 Subject: [PATCH 2/9] Skip window title update for dummy beatmap --- osu.Game/OsuGame.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 3b55c320b3..fb9be8860c 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -829,7 +829,11 @@ namespace osu.Game beatmap.OldValue?.CancelAsyncLoad(); beatmap.NewValue?.BeginAsyncLoad(); - Host.Window.Title = $"{Name} - {beatmap.NewValue.BeatmapInfo.GetDisplayTitleRomanisable(true, false)}"; + // prevent weird window title saying please load a beatmap + if (beatmap.NewValue is null or DummyWorkingBeatmap) + Host.Window.Title = Name; + else + Host.Window.Title = $"{Name} - {beatmap.NewValue.BeatmapInfo.GetDisplayTitleRomanisable(true, false)}"; } private void modsChanged(ValueChangedEvent> mods) From 14b5c0bf10389b924fa8ca515c2e27457fdcc119 Mon Sep 17 00:00:00 2001 From: Zihad Date: Tue, 4 Mar 2025 19:56:48 +0600 Subject: [PATCH 3/9] Update window title in input thread --- osu.Game/OsuGame.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index fb9be8860c..a80d646e15 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -830,10 +830,11 @@ namespace osu.Game beatmap.NewValue?.BeginAsyncLoad(); // prevent weird window title saying please load a beatmap - if (beatmap.NewValue is null or DummyWorkingBeatmap) - Host.Window.Title = Name; - else - Host.Window.Title = $"{Name} - {beatmap.NewValue.BeatmapInfo.GetDisplayTitleRomanisable(true, false)}"; + string newTitle = Name; + if (beatmap.NewValue != null && beatmap.NewValue is not DummyWorkingBeatmap) + newTitle = $"{Name} - {beatmap.NewValue.BeatmapInfo.GetDisplayTitleRomanisable(true, false)}"; + + Host.InputThread.Scheduler.AddOnce(s => Host.Window.Title = s, newTitle); } private void modsChanged(ValueChangedEvent> mods) From 8ce6003a3e156cac95f448f40f473d9023c278df Mon Sep 17 00:00:00 2001 From: Zihad Date: Tue, 4 Mar 2025 20:36:53 +0600 Subject: [PATCH 4/9] Skip updating window title in headless mode --- osu.Game/OsuGame.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index a80d646e15..2b9e2cb9cd 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -829,6 +829,9 @@ namespace osu.Game beatmap.OldValue?.CancelAsyncLoad(); beatmap.NewValue?.BeginAsyncLoad(); + if (Host.Window == null) + return; + // prevent weird window title saying please load a beatmap string newTitle = Name; if (beatmap.NewValue != null && beatmap.NewValue is not DummyWorkingBeatmap) From 5feddae6c75f8f8020196362ea40646c7a08460e Mon Sep 17 00:00:00 2001 From: Zihad Date: Wed, 5 Mar 2025 21:35:24 +0600 Subject: [PATCH 5/9] Revert "Update window title in input thread" This reverts commit 14b5c0bf10389b924fa8ca515c2e27457fdcc119. This is not necessary as the title update is already scheduled on the correct thread by the framework. --- osu.Game/OsuGame.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 2b9e2cb9cd..e070e89c19 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -837,7 +837,7 @@ namespace osu.Game if (beatmap.NewValue != null && beatmap.NewValue is not DummyWorkingBeatmap) newTitle = $"{Name} - {beatmap.NewValue.BeatmapInfo.GetDisplayTitleRomanisable(true, false)}"; - Host.InputThread.Scheduler.AddOnce(s => Host.Window.Title = s, newTitle); + Host.Window.Title = newTitle; } private void modsChanged(ValueChangedEvent> mods) From 4ae5f239cb3c342812bef639f43971ccca7d3a71 Mon Sep 17 00:00:00 2001 From: Zihad Date: Wed, 5 Mar 2025 21:41:11 +0600 Subject: [PATCH 6/9] Remove unnecessary comment --- osu.Game/OsuGame.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index e070e89c19..abe5ce21c6 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -832,7 +832,6 @@ namespace osu.Game if (Host.Window == null) return; - // prevent weird window title saying please load a beatmap string newTitle = Name; if (beatmap.NewValue != null && beatmap.NewValue is not DummyWorkingBeatmap) newTitle = $"{Name} - {beatmap.NewValue.BeatmapInfo.GetDisplayTitleRomanisable(true, false)}"; From d33a8dfc3b57d3888c09a232e6d8fa3fb70c6dca Mon Sep 17 00:00:00 2001 From: Zihad Date: Wed, 5 Mar 2025 22:47:39 +0600 Subject: [PATCH 7/9] Skip updating window title for protected mapsets --- osu.Game/OsuGame.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index abe5ce21c6..37ff70ccb7 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -833,7 +833,7 @@ namespace osu.Game return; string newTitle = Name; - if (beatmap.NewValue != null && beatmap.NewValue is not DummyWorkingBeatmap) + if (beatmap.NewValue?.BeatmapSetInfo?.Protected == false && beatmap.NewValue is not DummyWorkingBeatmap) newTitle = $"{Name} - {beatmap.NewValue.BeatmapInfo.GetDisplayTitleRomanisable(true, false)}"; Host.Window.Title = newTitle; From 02d19eaa55c05fe9149cf7771ca40342bc689bbd Mon Sep 17 00:00:00 2001 From: Zihad Date: Thu, 6 Mar 2025 01:36:59 +0600 Subject: [PATCH 8/9] Update window title changes to match osu! stable It shows beatmap metadata during gameplay, spectating, and watching replays but shows beatmap filename during editng --- osu.Game/OsuGame.cs | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 37ff70ccb7..ed71f357a5 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -421,6 +421,7 @@ namespace osu.Game SelectedMods.BindValueChanged(modsChanged); Beatmap.BindValueChanged(beatmapChanged, true); + configUserActivity.BindValueChanged(userActivityChanged); applySafeAreaConsiderations = LocalConfig.GetBindable(OsuSetting.SafeAreaConsiderations); applySafeAreaConsiderations.BindValueChanged(apply => SafeAreaContainer.SafeAreaOverrideEdges = apply.NewValue ? SafeAreaOverrideEdges : Edges.All, true); @@ -828,13 +829,41 @@ namespace osu.Game { beatmap.OldValue?.CancelAsyncLoad(); beatmap.NewValue?.BeginAsyncLoad(); + updateWindowTitle(); + } + private void userActivityChanged(ValueChangedEvent userActivity) + { + updateWindowTitle(); + } + + private void updateWindowTitle() + { if (Host.Window == null) return; + if (Beatmap.Value?.BeatmapSetInfo?.Protected != false || Beatmap.Value is DummyWorkingBeatmap) + { + Host.Window.Title = Name; + return; + } + string newTitle = Name; - if (beatmap.NewValue?.BeatmapSetInfo?.Protected == false && beatmap.NewValue is not DummyWorkingBeatmap) - newTitle = $"{Name} - {beatmap.NewValue.BeatmapInfo.GetDisplayTitleRomanisable(true, false)}"; + + switch (configUserActivity.Value) + { + case UserActivity.InGame: + case UserActivity.TestingBeatmap: + case UserActivity.WatchingReplay: + newTitle = $"{Name} - {Beatmap.Value.BeatmapInfo.GetDisplayTitleRomanisable(true, false)}"; + break; + + case UserActivity.EditingBeatmap: + if (Beatmap.Value.BeatmapInfo.Path != null) + newTitle = $"{Name} - {Beatmap.Value.BeatmapInfo.Path}"; + + break; + } Host.Window.Title = newTitle; } From 975f4e4c7df982ff2762b0223b2ef51c19d2070e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 6 Mar 2025 15:45:11 +0900 Subject: [PATCH 9/9] Simplify code and don't set title if already correct --- osu.Game/OsuGame.cs | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index ed71f357a5..4a9154f14b 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -421,7 +421,7 @@ namespace osu.Game SelectedMods.BindValueChanged(modsChanged); Beatmap.BindValueChanged(beatmapChanged, true); - configUserActivity.BindValueChanged(userActivityChanged); + configUserActivity.BindValueChanged(_ => updateWindowTitle()); applySafeAreaConsiderations = LocalConfig.GetBindable(OsuSetting.SafeAreaConsiderations); applySafeAreaConsiderations.BindValueChanged(apply => SafeAreaContainer.SafeAreaOverrideEdges = apply.NewValue ? SafeAreaOverrideEdges : Edges.All, true); @@ -832,26 +832,19 @@ namespace osu.Game updateWindowTitle(); } - private void userActivityChanged(ValueChangedEvent userActivity) - { - updateWindowTitle(); - } - private void updateWindowTitle() { if (Host.Window == null) return; - if (Beatmap.Value?.BeatmapSetInfo?.Protected != false || Beatmap.Value is DummyWorkingBeatmap) - { - Host.Window.Title = Name; - return; - } - - string newTitle = Name; + string newTitle; switch (configUserActivity.Value) { + default: + newTitle = Name; + break; + case UserActivity.InGame: case UserActivity.TestingBeatmap: case UserActivity.WatchingReplay: @@ -859,13 +852,12 @@ namespace osu.Game break; case UserActivity.EditingBeatmap: - if (Beatmap.Value.BeatmapInfo.Path != null) - newTitle = $"{Name} - {Beatmap.Value.BeatmapInfo.Path}"; - + newTitle = $"{Name} - {Beatmap.Value.BeatmapInfo.Path ?? "new beatmap"}"; break; } - Host.Window.Title = newTitle; + if (newTitle != Host.Window.Title) + Host.Window.Title = newTitle; } private void modsChanged(ValueChangedEvent> mods)