From 31e5f74e051618c4085fe605587586f4a115469e Mon Sep 17 00:00:00 2001
From: Evan Husted <greem@greemdev.net>
Date: Sun, 19 Jan 2025 13:05:20 -0600
Subject: [PATCH] UI: misc: Replace spaces in Title with newlines when using
 custom title bar (since the Title is in an Avalonia tooltip)

---
 src/Ryujinx/AppHost.cs                  | 6 +++---
 src/Ryujinx/Assets/locales.json         | 2 +-
 src/Ryujinx/DiscordIntegrationModule.cs | 3 ++-
 src/Ryujinx/Utilities/TitleHelper.cs    | 6 ++++--
 4 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs
index a35a79e86..2642f603b 100644
--- a/src/Ryujinx/AppHost.cs
+++ b/src/Ryujinx/AppHost.cs
@@ -489,7 +489,7 @@ namespace Ryujinx.Ava
 
             Dispatcher.UIThread.InvokeAsync(() =>
             {
-                _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device.Processes.ActiveApplication, Program.Version);
+                _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowTitleBar);
             });
 
             _viewModel.SetUiProgressHandlers(Device);
@@ -872,7 +872,7 @@ namespace Ryujinx.Ava
             Device?.System.TogglePauseEmulation(false);
 
             _viewModel.IsPaused = false;
-            _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version);
+            _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowTitleBar);
             Logger.Info?.Print(LogClass.Emulation, "Emulation was resumed");
         }
 
@@ -881,7 +881,7 @@ namespace Ryujinx.Ava
             Device?.System.TogglePauseEmulation(true);
 
             _viewModel.IsPaused = true;
-            _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, LocaleManager.Instance[LocaleKeys.Paused]);
+            _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowTitleBar, LocaleManager.Instance[LocaleKeys.Paused]);
             Logger.Info?.Print(LogClass.Emulation, "Emulation was paused");
         }
 
diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json
index 5569506a4..3940ac93f 100644
--- a/src/Ryujinx/Assets/locales.json
+++ b/src/Ryujinx/Assets/locales.json
@@ -22898,4 +22898,4 @@
       }
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/src/Ryujinx/DiscordIntegrationModule.cs b/src/Ryujinx/DiscordIntegrationModule.cs
index 040d61ecf..18bdfaf17 100644
--- a/src/Ryujinx/DiscordIntegrationModule.cs
+++ b/src/Ryujinx/DiscordIntegrationModule.cs
@@ -2,6 +2,7 @@ using DiscordRPC;
 using Gommon;
 using Humanizer;
 using Humanizer.Localisation;
+using Ryujinx.Ava.Utilities;
 using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.Ava.Utilities.Configuration;
 using Ryujinx.Common;
@@ -97,7 +98,7 @@ namespace Ryujinx.Ava
                 },
                 Details = TruncateToByteLength($"Playing {appMeta.Title}"),
                 State = appMeta.LastPlayed.HasValue && appMeta.TimePlayed.TotalSeconds > 5
-                    ? $"Total play time: {appMeta.TimePlayed.Humanize(2, false, maxUnit: TimeUnit.Hour)}"
+                    ? $"Total play time: {ValueFormatUtils.FormatTimeSpan(appMeta.TimePlayed)}"
                     : "Never played",
                 Timestamps = Timestamps.Now
             });
diff --git a/src/Ryujinx/Utilities/TitleHelper.cs b/src/Ryujinx/Utilities/TitleHelper.cs
index be7a87f82..d255838b8 100644
--- a/src/Ryujinx/Utilities/TitleHelper.cs
+++ b/src/Ryujinx/Utilities/TitleHelper.cs
@@ -4,7 +4,7 @@ namespace Ryujinx.Ava.Utilities
 {
     public static class TitleHelper
     {
-        public static string ActiveApplicationTitle(ProcessResult activeProcess, string applicationVersion, string pauseString = "")
+        public static string ActiveApplicationTitle(ProcessResult activeProcess, string applicationVersion, bool customTitlebar, string pauseString = "")
         {
             if (activeProcess == null)
                 return string.Empty;
@@ -14,7 +14,9 @@ namespace Ryujinx.Ava.Utilities
             string titleIdSection = $" ({activeProcess.ProgramIdText.ToUpper()})";
             string titleArchSection = activeProcess.Is64Bit ? " (64-bit)" : " (32-bit)";
 
-            string appTitle = $"Ryujinx {applicationVersion} -{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}";
+            string appTitle = customTitlebar 
+                ? $"Ryujinx {applicationVersion}\n{titleNameSection.Trim()}\n{titleVersionSection.Trim()}\n{titleIdSection.Trim()}{titleArchSection}"
+                : $"Ryujinx {applicationVersion} -{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}";
 
             return !string.IsNullOrEmpty(pauseString)
                 ? appTitle + $" ({pauseString})"