diff --git a/src/Ryujinx/Assets/Styles/Styles.xaml b/src/Ryujinx/Assets/Styles/Styles.xaml
index eb40e853c..112815fb5 100644
--- a/src/Ryujinx/Assets/Styles/Styles.xaml
+++ b/src/Ryujinx/Assets/Styles/Styles.xaml
@@ -440,7 +440,7 @@
13
26
28
- 900
+ 700
756
diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json
index d69c3ee9b..e64cae4d5 100644
--- a/src/Ryujinx/Assets/locales.json
+++ b/src/Ryujinx/Assets/locales.json
@@ -23822,6 +23822,31 @@
"zh_TW": "上次更新時間: {0}"
}
},
+ {
+ "ID": "CompatibilityListTitle",
+ "Translations": {
+ "ar_SA": "",
+ "de_DE": "",
+ "el_GR": "",
+ "en_US": "Compatibility List - {0} entries",
+ "es_ES": "",
+ "fr_FR": "",
+ "he_IL": "",
+ "it_IT": "",
+ "ja_JP": "",
+ "ko_KR": "",
+ "no_NO": "",
+ "pl_PL": "",
+ "pt_BR": "",
+ "ru_RU": "",
+ "sv_SE": "",
+ "th_TH": "",
+ "tr_TR": "",
+ "uk_UA": "",
+ "zh_CN": "",
+ "zh_TW": ""
+ }
+ },
{
"ID": "CompatibilityListWarning",
"Translations": {
@@ -23872,6 +23897,31 @@
"zh_TW": "搜尋相容性列表紀錄..."
}
},
+ {
+ "ID": "CompatibilityListSearchBoxWatermarkWithCount",
+ "Translations": {
+ "ar_SA": "",
+ "de_DE": "",
+ "el_GR": "",
+ "en_US": "Search {0} compatibility entries...",
+ "es_ES": "",
+ "fr_FR": "",
+ "he_IL": "",
+ "it_IT": "",
+ "ja_JP": "",
+ "ko_KR": "",
+ "no_NO": "Søk i {0} kompatibilitetsoppføringer...",
+ "pl_PL": "",
+ "pt_BR": "",
+ "ru_RU": "",
+ "sv_SE": "",
+ "th_TH": "",
+ "tr_TR": "",
+ "uk_UA": "",
+ "zh_CN": "",
+ "zh_TW": ""
+ }
+ },
{
"ID": "CompatibilityListOpen",
"Translations": {
diff --git a/src/Ryujinx/Common/LocaleManager.cs b/src/Ryujinx/Common/LocaleManager.cs
index f5194dd13..30b055d8b 100644
--- a/src/Ryujinx/Common/LocaleManager.cs
+++ b/src/Ryujinx/Common/LocaleManager.cs
@@ -1,4 +1,5 @@
using Gommon;
+using Ryujinx.Ava.Systems;
using Ryujinx.Ava.UI.ViewModels;
using Ryujinx.Ava.Systems.Configuration;
using Ryujinx.Common;
@@ -55,6 +56,8 @@ namespace Ryujinx.Ava.Common.Locale
SetDynamicValues(LocaleKeys.RyujinxConfirm, RyujinxApp.FullAppName);
SetDynamicValues(LocaleKeys.RyujinxUpdater, RyujinxApp.FullAppName);
SetDynamicValues(LocaleKeys.RyujinxRebooter, RyujinxApp.FullAppName);
+ SetDynamicValues(LocaleKeys.CompatibilityListSearchBoxWatermarkWithCount, CompatibilityCsv.Entries.Length);
+
}
public string this[LocaleKeys key]
diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs
index 9230cb78b..9635582c8 100644
--- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs
+++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs
@@ -407,7 +407,7 @@ namespace Ryujinx.Ava.UI.Controls
public async void OpenApplicationCompatibility_Click(object sender, RoutedEventArgs args)
{
if (sender is MenuItem { DataContext: MainWindowViewModel { SelectedApplication: not null } viewModel })
- await CompatibilityList.Show(viewModel.SelectedApplication.IdString);
+ await CompatibilityListWindow.Show(viewModel.SelectedApplication.IdString);
}
public async void OpenApplicationData_Click(object sender, RoutedEventArgs args)
diff --git a/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs b/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs
index 650223e1f..d6c10044d 100644
--- a/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs
+++ b/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs
@@ -1,6 +1,7 @@
using Gommon;
using Ryujinx.Ava.Systems;
using Ryujinx.Ava.Systems.AppLibrary;
+using Ryujinx.Ava.UI.Windows;
using System.Collections.Generic;
using System.Linq;
diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs
index 30a195747..13c2f4c8a 100644
--- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs
+++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs
@@ -51,7 +51,7 @@ namespace Ryujinx.Ava.UI.Views.Main
UninstallFileTypesMenuItem.Command = Commands.Create(UninstallFileTypes);
XciTrimmerMenuItem.Command = Commands.Create(XCITrimmerWindow.Show);
AboutWindowMenuItem.Command = Commands.Create(AboutWindow.Show);
- CompatibilityListMenuItem.Command = Commands.Create(() => CompatibilityList.Show());
+ CompatibilityListMenuItem.Command = Commands.Create(() => CompatibilityListWindow.Show());
UpdateMenuItem.Command = MainWindowViewModel.UpdateCommand;
diff --git a/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs b/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs
index 37b2aaf60..796123362 100644
--- a/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs
+++ b/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs
@@ -44,7 +44,7 @@ namespace Ryujinx.Ava.UI.Views.Misc
if (RyujinxApp.AppLifetime.Windows.TryGetFirst(x => x is ContentDialogOverlayWindow, out Window window))
window.Close(ContentDialogResult.None);
- await CompatibilityList.Show((string)playabilityLabel.Tag);
+ await CompatibilityListWindow.Show((string)playabilityLabel.Tag);
}
private async void IdString_OnClick(object sender, RoutedEventArgs e)
diff --git a/src/Ryujinx/UI/Views/Misc/ApplicationListView.axaml.cs b/src/Ryujinx/UI/Views/Misc/ApplicationListView.axaml.cs
index e7f476158..aa87a8c9a 100644
--- a/src/Ryujinx/UI/Views/Misc/ApplicationListView.axaml.cs
+++ b/src/Ryujinx/UI/Views/Misc/ApplicationListView.axaml.cs
@@ -6,6 +6,7 @@ using Ryujinx.Ava.UI.Controls;
using Ryujinx.Ava.UI.Helpers;
using Ryujinx.Ava.UI.ViewModels;
using Ryujinx.Ava.Systems.AppLibrary;
+using Ryujinx.Ava.UI.Windows;
using System;
using System.Linq;
@@ -35,7 +36,7 @@ namespace Ryujinx.Ava.UI.Views.Misc
if (sender is not Button { Content: TextBlock playabilityLabel })
return;
- await CompatibilityList.Show((string)playabilityLabel.Tag);
+ await CompatibilityListWindow.Show((string)playabilityLabel.Tag);
}
private async void IdString_OnClick(object sender, RoutedEventArgs e)
diff --git a/src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml.cs b/src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml.cs
deleted file mode 100644
index 29c9700e3..000000000
--- a/src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using Avalonia.Controls;
-using Avalonia.Styling;
-using FluentAvalonia.UI.Controls;
-using Ryujinx.Ava.Common.Locale;
-using Ryujinx.Ava.UI.Helpers;
-using Ryujinx.Ava.UI.ViewModels;
-using System.Threading.Tasks;
-
-namespace Ryujinx.Ava.UI.Views.Misc
-{
- public partial class CompatibilityList : UserControl
- {
- public static async Task Show(string titleId = null)
- {
- ContentDialog contentDialog = new()
- {
- PrimaryButtonText = string.Empty,
- SecondaryButtonText = string.Empty,
- CloseButtonText = LocaleManager.Instance[LocaleKeys.SettingsButtonClose],
- Content = new CompatibilityList
- {
- DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary),
- SearchBox = {
- Text = titleId ?? ""
- }
- }
- };
-
- await ContentDialogHelper.ShowAsync(contentDialog.ApplyStyles());
- }
-
- public CompatibilityList()
- {
- InitializeComponent();
- }
-
- private void TextBox_OnTextChanged(object sender, TextChangedEventArgs e)
- {
- if (DataContext is not CompatibilityViewModel cvm)
- return;
-
- if (sender is not TextBox searchBox)
- return;
-
- cvm.Search(searchBox.Text);
- }
- }
-}
diff --git a/src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml
similarity index 53%
rename from src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml
rename to src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml
index a9365d690..e3347252f 100644
--- a/src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml
+++ b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml
@@ -1,82 +1,82 @@
-
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-
+
-
+
-
+
diff --git a/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs
new file mode 100644
index 000000000..dde94f63b
--- /dev/null
+++ b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs
@@ -0,0 +1,50 @@
+using Avalonia.Controls;
+using Avalonia.Styling;
+using FluentAvalonia.UI.Controls;
+using FluentAvalonia.UI.Windowing;
+using Ryujinx.Ava.Common.Locale;
+using Ryujinx.Ava.Systems.Configuration;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.ViewModels;
+using Ryujinx.Ava.UI.Windows;
+using System.Threading.Tasks;
+
+namespace Ryujinx.Ava.UI.Windows
+{
+ public partial class CompatibilityListWindow : StyleableAppWindow
+ {
+ public static Task Show(string titleId = null) =>
+ ShowAsync(new CompatibilityListWindow
+ {
+ DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary),
+ SearchBoxFlush = { Text = titleId ?? string.Empty },
+ SearchBoxNormal = { Text = titleId ?? string.Empty }
+ });
+
+ public CompatibilityListWindow()
+ {
+ Title = RyujinxApp.FormatTitle(LocaleKeys.CompatibilityListTitle);
+
+ TitleBar.ExtendsContentIntoTitleBar = !ConfigurationState.Instance.ShowTitleBar;
+ TitleBar.TitleBarHitTestType = ConfigurationState.Instance.ShowTitleBar ? TitleBarHitTestType.Simple : TitleBarHitTestType.Complex;
+ TitleBar.Height = 37;
+
+ InitializeComponent();
+
+ RyuLogo.Source = MainWindowViewModel.IconBitmap;
+ FlushControls.IsVisible = !ConfigurationState.Instance.ShowTitleBar;
+ NormalControls.IsVisible = ConfigurationState.Instance.ShowTitleBar;
+ }
+
+ private void TextBox_OnTextChanged(object sender, TextChangedEventArgs e)
+ {
+ if (DataContext is not CompatibilityViewModel cvm)
+ return;
+
+ if (sender is not TextBox searchBox)
+ return;
+
+ cvm.Search(searchBox.Text);
+ }
+ }
+}