From bafd58b0dfcec0421aade65566f74809c2af488c Mon Sep 17 00:00:00 2001 From: PabloMK7 Date: Sun, 3 May 2026 17:51:17 +0200 Subject: [PATCH] frontends: Adapt UIs to new changes --- .../java/org/citra/citra_emu/NativeLibrary.kt | 66 ++++++++++--------- src/android/app/src/main/jni/config.cpp | 1 + src/android/app/src/main/jni/default_ini.h | 3 +- .../app/src/main/res/values/strings.xml | 3 +- src/citra_qt/citra_qt.cpp | 25 ++++++- src/citra_qt/configuration/config.cpp | 5 +- src/citra_qt/configuration/config.h | 2 +- src/citra_qt/main.ui | 34 ++++++++++ src/core/arm/dyncom/arm_dyncom.h | 2 +- 9 files changed, 103 insertions(+), 38 deletions(-) diff --git a/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt b/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt index 018fea670..32ec8671b 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt @@ -317,6 +317,12 @@ object NativeLibrary { canContinue = false } + CoreError.ErrorCoreExceptionRaised -> { + title = emulationActivity.getString(R.string.fatal_error) + message = emulationActivity.getString(R.string.fatal_error_message) + canContinue = false + } + CoreError.ErrorUnknown -> { title = emulationActivity.getString(R.string.fatal_error) message = emulationActivity.getString(R.string.fatal_error_message) @@ -439,7 +445,7 @@ object NativeLibrary { return } - if (resultCode == EmulationErrorDialogFragment.ShutdownRequested) { + if (resultCode == CoreError.ShutdownRequested.value) { emulationActivity.finish() return } @@ -458,23 +464,25 @@ object NativeLibrary { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { emulationActivity = requireActivity() as EmulationActivity - var captionId = R.string.loader_error_invalid_format val result = requireArguments().getInt(RESULT_CODE) - if (result == ErrorLoader_ErrorEncrypted) { - captionId = R.string.loader_error_encrypted + var captionString = getString(R.string.loader_error_invalid_format) + if (result == CoreError.ErrorLoader_ErrorEncrypted.value) { + captionString = getString(R.string.loader_error_encrypted) } - if (result == ErrorArticDisconnected) { - captionId = R.string.artic_base + if (result == CoreError.ErrorArticDisconnected.value) { + captionString = getString(R.string.artic_base) } val alert = MaterialAlertDialogBuilder(requireContext()) - .setTitle(captionId) + .setTitle(captionString) .setMessage( Html.fromHtml( - if (result == ErrorArticDisconnected) - CitraApplication.appContext.resources.getString(R.string.artic_server_comm_error) + if (result == CoreError.ErrorArticDisconnected.value) + getString(R.string.artic_server_comm_error) + else if (result == CoreError.ErrorLoader_ErrorEncrypted.value) + getString(R.string.loader_error_encrypted_desc) else - CitraApplication.appContext.resources.getString(R.string.redump_games), + getString(R.string.loader_error_generic, result), Html.FROM_HTML_MODE_LEGACY ) ) @@ -496,21 +504,6 @@ object NativeLibrary { const val RESULT_CODE = "resultcode" - const val Success = 0 - const val ErrorNotInitialized = 1 - const val ErrorGetLoader = 2 - const val ErrorSystemMode = 3 - const val ErrorLoader = 4 - const val ErrorLoader_ErrorEncrypted = 5 - const val ErrorLoader_ErrorInvalidFormat = 6 - const val ErrorLoader_ErrorGBATitle = 7 - const val ErrorSystemFiles = 8 - const val ErrorSavestate = 9 - const val ErrorArticDisconnected = 10 - const val ErrorN3DSApplication = 11 - const val ShutdownRequested = 12 - const val ErrorUnknown = 13 - fun newInstance(resultCode: Int): EmulationErrorDialogFragment { val args = Bundle() args.putInt(RESULT_CODE, resultCode) @@ -857,12 +850,23 @@ object NativeLibrary { FileUtil.deleteDocument(path) } - enum class CoreError { - ErrorSystemFiles, - ErrorSavestate, - ErrorArticDisconnected, - ErrorN3DSApplication, - ErrorUnknown + enum class CoreError(val value: Int) { + Success(0), + ErrorNotInitialized(1), + ErrorGetLoader(2), + ErrorSystemMode(3), + ErrorLoader(4), + ErrorLoader_ErrorEncrypted(5), + ErrorLoader_ErrorInvalidFormat(6), + ErrorLoader_ErrorGBATitle(7), + ErrorSystemFiles(8), + ErrorSavestate(9), + ErrorArticDisconnected(10), + ErrorN3DSApplication(11), + ErrorCoreExceptionRaised(12), + ErrorMemoryExceptionRaised(13), + ShutdownRequested(14), + ErrorUnknown(15) } enum class InstallStatus { diff --git a/src/android/app/src/main/jni/config.cpp b/src/android/app/src/main/jni/config.cpp index aba68a623..8ac729fce 100644 --- a/src/android/app/src/main/jni/config.cpp +++ b/src/android/app/src/main/jni/config.cpp @@ -317,6 +317,7 @@ void Config::ReadValues() { ReadSetting("Debugging", Settings::values.instant_debug_log); ReadSetting("Debugging", Settings::values.enable_rpc_server); ReadSetting("Debugging", Settings::values.toggle_unique_data_console_type); + ReadSetting("Debugging", Settings::values.break_on_unmapped_memory_access); for (const auto& service_module : Service::service_module_map) { bool use_lle = diff --git a/src/android/app/src/main/jni/default_ini.h b/src/android/app/src/main/jni/default_ini.h index 46a796792..2a70a060a 100644 --- a/src/android/app/src/main/jni/default_ini.h +++ b/src/android/app/src/main/jni/default_ini.h @@ -35,7 +35,8 @@ constexpr std::array android_config_omitted_keys = { Keys::audio_encoder, Keys::audio_encoder_options, Keys::audio_bitrate, - Keys::last_artic_base_addr, // On Android, this value is stored as a "preference" + Keys::last_artic_base_addr, // On Android, this value is stored as a "preference" + Keys::break_on_unmapped_memory_access, // Does nothing as the error is ignored }; // clang-format off diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 577d1737c..08a422059 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -393,7 +393,6 @@ Learn More Close Reset to Default - game cartridges or installed titles.]]> Default None Auto @@ -437,9 +436,11 @@ Your ROM is Encrypted + blog post for more information.]]> Invalid ROM format ROM file does not exist No bootable game present! + An error occurred while loading ROM: %d Press Back to access the menu. diff --git a/src/citra_qt/citra_qt.cpp b/src/citra_qt/citra_qt.cpp index aa2c90228..180591c9f 100644 --- a/src/citra_qt/citra_qt.cpp +++ b/src/citra_qt/citra_qt.cpp @@ -855,10 +855,11 @@ void GMainWindow::InitializeHotkeys() { // QAction Hotkeys const auto link_action_shortcut = [&](QAction* action, const QString& action_name, - const bool primary_only = false) { + const bool primary_only = false, + const bool auto_repeat = false) { static const QString main_window = QStringLiteral("Main Window"); action->setShortcut(hotkey_registry.GetKeySequence(main_window, action_name)); - action->setAutoRepeat(false); + action->setAutoRepeat(auto_repeat); this->addAction(action); if (!primary_only) secondary_window->addAction(action); @@ -875,6 +876,9 @@ void GMainWindow::InitializeHotkeys() { link_action_shortcut(ui->action_Show_Status_Bar, QStringLiteral("Toggle Status Bar")); link_action_shortcut(ui->action_Fullscreen, fullscreen, true); link_action_shortcut(ui->action_Capture_Screenshot, QStringLiteral("Capture Screenshot")); + link_action_shortcut(ui->action_Debug_Pause, QStringLiteral("Debug Pause")); + link_action_shortcut(ui->action_Debug_Resume, QStringLiteral("Debug Resume")); + link_action_shortcut(ui->action_Debug_Step, QStringLiteral("Debug Step"), false, true); link_action_shortcut(ui->action_Screen_Layout_Swap_Screens, QStringLiteral("Swap Screens")); link_action_shortcut(ui->action_Screen_Layout_Upright_Screens, QStringLiteral("Rotate Screens Upright")); @@ -1189,6 +1193,23 @@ void GMainWindow::ConnectMenuEvents() { connect_menu(ui->action_Capture_Screenshot, &GMainWindow::OnCaptureScreenshot); connect_menu(ui->action_Dump_Video, &GMainWindow::OnDumpVideo); + // Tools debug + connect_menu(ui->action_Debug_Pause, [this] { + if (emu_thread) { + emu_thread->SetRunning(false); + } + }); + connect_menu(ui->action_Debug_Resume, [this] { + if (emu_thread) { + emu_thread->SetRunning(true); + } + }); + connect_menu(ui->action_Debug_Step, [this] { + if (emu_thread) { + emu_thread->ExecStep(); + } + }); + // Tools connect_menu(ui->action_Compress_ROM_File, &GMainWindow::OnCompressFile); connect_menu(ui->action_Decompress_ROM_File, &GMainWindow::OnDecompressFile); diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index 89e6e8b51..30d54a93f 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -57,12 +57,15 @@ const std::array, Settings::NativeAnalog::NumAnalogs> QtConfi // This must be in alphabetical order according to action name as it must have the same order as // UISetting::values.shortcuts, which is alphabetically ordered. // clang-format off -const std::array QtConfig::default_hotkeys {{ +const std::array QtConfig::default_hotkeys {{ {QStringLiteral("Advance Frame"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::ApplicationShortcut}}, {QStringLiteral("Audio Mute/Unmute"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+M"), Qt::WindowShortcut}}, {QStringLiteral("Audio Volume Down"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::WindowShortcut}}, {QStringLiteral("Audio Volume Up"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::WindowShortcut}}, {QStringLiteral("Capture Screenshot"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+P"), Qt::WidgetWithChildrenShortcut}}, + {QStringLiteral("Debug Pause"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+F4"),Qt::WidgetWithChildrenShortcut}}, + {QStringLiteral("Debug Resume"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+F5"),Qt::WidgetWithChildrenShortcut}}, + {QStringLiteral("Debug Step"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+F6"),Qt::WidgetWithChildrenShortcut}}, {QStringLiteral("Continue/Pause Emulation"), QStringLiteral("Main Window"), {QStringLiteral("F4"), Qt::WindowShortcut}}, {QStringLiteral("Decrease 3D Factor"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+-"), Qt::ApplicationShortcut}}, {QStringLiteral("Decrease Speed Limit"), QStringLiteral("Main Window"), {QStringLiteral("-"), Qt::ApplicationShortcut}}, diff --git a/src/citra_qt/configuration/config.h b/src/citra_qt/configuration/config.h index 3fba498ed..6cc87f7f0 100644 --- a/src/citra_qt/configuration/config.h +++ b/src/citra_qt/configuration/config.h @@ -26,7 +26,7 @@ public: static const std::array default_buttons; static const std::array, Settings::NativeAnalog::NumAnalogs> default_analogs; - static const std::array default_hotkeys; + static const std::array default_hotkeys; private: void Initialize(const std::string& config_name); diff --git a/src/citra_qt/main.ui b/src/citra_qt/main.ui index acca5361d..1e5dbb4e5 100644 --- a/src/citra_qt/main.ui +++ b/src/citra_qt/main.ui @@ -206,6 +206,16 @@ + + + Debug + + + + + + + @@ -453,6 +463,30 @@ Capture Screenshot + + + true + + + Debug Pause + + + + + true + + + Debug Resume + + + + + true + + + Debug Step + + true diff --git a/src/core/arm/dyncom/arm_dyncom.h b/src/core/arm/dyncom/arm_dyncom.h index c13828176..cfe1d3e92 100644 --- a/src/core/arm/dyncom/arm_dyncom.h +++ b/src/core/arm/dyncom/arm_dyncom.h @@ -1,4 +1,4 @@ -// Copyright 2014 Citra Emulator Project +// Copyright Citra Emulator Project / Azahar Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included.