diff --git a/src/Ryujinx.HLE/HOS/Applets/Dummy/DummyApplet.cs b/src/Ryujinx.HLE/HOS/Applets/Dummy/DummyApplet.cs
index a581e1864..0019dfc90 100644
--- a/src/Ryujinx.HLE/HOS/Applets/Dummy/DummyApplet.cs
+++ b/src/Ryujinx.HLE/HOS/Applets/Dummy/DummyApplet.cs
@@ -19,6 +19,7 @@ namespace Ryujinx.HLE.HOS.Applets.Dummy
public ResultCode Start(AppletSession normalSession, AppletSession interactiveSession)
{
+ _system.Device.UIHandler.DisplayMissingAppletDialog();
_normalSession = normalSession;
_normalSession.Push(BuildResponse());
AppletStateChanged?.Invoke(this, null);
diff --git a/src/Ryujinx.HLE/UI/IHostUIHandler.cs b/src/Ryujinx.HLE/UI/IHostUIHandler.cs
index 29a092b58..8930ba22c 100644
--- a/src/Ryujinx.HLE/UI/IHostUIHandler.cs
+++ b/src/Ryujinx.HLE/UI/IHostUIHandler.cs
@@ -79,5 +79,10 @@ namespace Ryujinx.HLE.UI
/// Gets weather or not the applet is real in the system
///
bool IsAppletReal(RealAppletId appletId);
+
+ ///
+ /// Displays a dialog informing the user that the requested applet is missing implementation.
+ ///
+ void DisplayMissingAppletDialog();
}
}
diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json
index 0bc62abd0..22560ced7 100644
--- a/src/Ryujinx/Assets/locales.json
+++ b/src/Ryujinx/Assets/locales.json
@@ -19247,6 +19247,256 @@
"zh_TW": "已設定底座模式。手提控制應該停用。"
}
},
+ {
+ "ID": "RealDescription",
+ "Translations": {
+ "ar_SA": "",
+ "de_DE": "",
+ "el_GR": "",
+ "en_US": "This is a collection of real applet options.",
+ "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": "RealReal",
+ "Translations": {
+ "ar_SA": "",
+ "de_DE": "",
+ "el_GR": "",
+ "en_US": "Real",
+ "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": "RealSoftware",
+ "Translations": {
+ "ar_SA": "",
+ "de_DE": "",
+ "el_GR": "",
+ "en_US": "Software",
+ "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": "RealMissingApplets",
+ "Translations": {
+ "ar_SA": "",
+ "de_DE": "",
+ "el_GR": "",
+ "en_US": "Missing Applets",
+ "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": "RealSoftwareKeyboard",
+ "Translations": {
+ "ar_SA": "",
+ "de_DE": "",
+ "el_GR": "",
+ "en_US": "Software Keyboard",
+ "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": "RealBrowser",
+ "Translations": {
+ "ar_SA": "",
+ "de_DE": "",
+ "el_GR": "",
+ "en_US": "Browser",
+ "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": "RealController",
+ "Translations": {
+ "ar_SA": "",
+ "de_DE": "",
+ "el_GR": "",
+ "en_US": "Controller",
+ "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": "RealPlayerSelect",
+ "Translations": {
+ "ar_SA": "",
+ "de_DE": "",
+ "el_GR": "",
+ "en_US": "Player Select",
+ "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": "RealCabinet",
+ "Translations": {
+ "ar_SA": "",
+ "de_DE": "",
+ "el_GR": "",
+ "en_US": "Cabinet",
+ "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": "ErrorMissingApplet",
+ "Translations": {
+ "ar_SA": "",
+ "de_DE": "",
+ "el_GR": "",
+ "en_US": "The functionality of this applet is not implemented, Please set '{0}' to '{1}' if you wish to use the NX version.\n",
+ "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": "UpdaterRenaming",
"Translations": {
diff --git a/src/Ryujinx/Headless/Windows/WindowBase.cs b/src/Ryujinx/Headless/Windows/WindowBase.cs
index 6f4e6ee02..9bb86bb6f 100644
--- a/src/Ryujinx/Headless/Windows/WindowBase.cs
+++ b/src/Ryujinx/Headless/Windows/WindowBase.cs
@@ -574,5 +574,10 @@ namespace Ryujinx.Headless
{
return false;
}
+
+ public void DisplayMissingAppletDialog()
+ {
+ DisplayMessageDialog("Missing Applet", "The requested applet was not found.");
+ }
}
}
diff --git a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs
index 0e3ae70fd..b1f1fc13d 100644
--- a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs
+++ b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs
@@ -364,5 +364,21 @@ namespace Ryujinx.Ava.UI.Applet
return missingAppletsAsReal;
}
}
+
+ public void DisplayMissingAppletDialog()
+ {
+ string title = LocaleManager.Instance[LocaleKeys.RealMissingApplets];
+ string message = LocaleManager.Instance[LocaleKeys.ErrorMissingApplet];
+ string real = LocaleManager.Instance[LocaleKeys.RealReal];
+ string options = LocaleManager.Instance[LocaleKeys.MenuBarOptions].Trim('_');
+ message = message.Replace("{0}", title);
+ message = message.Replace("{1}", real);
+ string location = options + "->" +
+ LocaleManager.Instance[LocaleKeys.Settings] + "->" +
+ LocaleManager.Instance[LocaleKeys.SettingsTabRealApplets] + "->" +
+ LocaleManager.Instance[LocaleKeys.RealMissingApplets];
+ message += location;
+ DisplayErrorAppletDialog(title, message, [LocaleManager.Instance[LocaleKeys.InputDialogOk]]);
+ }
}
}
diff --git a/src/Ryujinx/UI/Views/Settings/SettingsRealApplets.axaml b/src/Ryujinx/UI/Views/Settings/SettingsRealApplets.axaml
index 8cc879950..f0f2e089b 100644
--- a/src/Ryujinx/UI/Views/Settings/SettingsRealApplets.axaml
+++ b/src/Ryujinx/UI/Views/Settings/SettingsRealApplets.axaml
@@ -6,6 +6,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
+ xmlns:markup="clr-namespace:Ryujinx.Ava.Common.Markup"
mc:Ignorable="d"
x:DataType="viewModels:SettingsViewModel">
@@ -30,10 +31,10 @@
+ Text="{markup:Locale SettingsTabRealApplets}" />
+ Text="{markup:Locale RealDescription}" />
@@ -43,13 +44,13 @@
-
-
+
+
+ Text="{markup:Locale RealMissingApplets}" />
@@ -60,13 +61,13 @@
-
-
+
+
+ Text="{markup:Locale RealSoftwareKeyboard}" />
@@ -77,13 +78,13 @@
-
-
+
+
+ Text="{markup:Locale RealBrowser}" />
@@ -94,13 +95,13 @@
-
-
+
+
+ Text="{markup:Locale RealController}" />
@@ -111,13 +112,13 @@
-
-
+
+
+ Text="{markup:Locale RealPlayerSelect}" />
@@ -128,13 +129,13 @@
-
-
+
+
+ Text="{markup:Locale RealCabinet}" />