From 6082faff5264ccfe5a5d083d6d743d774589f87e Mon Sep 17 00:00:00 2001 From: Eduardo Mosko Date: Sun, 7 Sep 2025 17:45:53 -0300 Subject: [PATCH 1/2] feat: create hotkey for reloading the most recent rom --- src/frontend/qt_sdl/Config.cpp | 2 ++ src/frontend/qt_sdl/EmuInstance.h | 1 + src/frontend/qt_sdl/EmuInstanceInput.cpp | 3 ++- src/frontend/qt_sdl/EmuThread.cpp | 4 +++ src/frontend/qt_sdl/EmuThread.h | 2 ++ .../qt_sdl/InputConfig/InputConfigDialog.h | 6 +++-- src/frontend/qt_sdl/Window.cpp | 26 +++++++++++++++++++ src/frontend/qt_sdl/Window.h | 1 + 8 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/frontend/qt_sdl/Config.cpp b/src/frontend/qt_sdl/Config.cpp index f767fcc92d..ca793de488 100644 --- a/src/frontend/qt_sdl/Config.cpp +++ b/src/frontend/qt_sdl/Config.cpp @@ -174,6 +174,7 @@ LegacyEntry LegacyFile[] = {"HKKey_GuitarGripRed", 0, "Keyboard.HK_GuitarGripRed", true}, {"HKKey_GuitarGripYellow", 0, "Keyboard.HK_GuitarGripYellow", true}, {"HKKey_GuitarGripBlue", 0, "Keyboard.HK_GuitarGripBlue", true}, + {"HKKey_Reload", 0, "Keyboard.HK_Reload", true}, {"HKJoy_Lid", 0, "Joystick.HK_Lid", true}, {"HKJoy_Mic", 0, "Joystick.HK_Mic", true}, @@ -194,6 +195,7 @@ LegacyEntry LegacyFile[] = {"HKJoy_GuitarGripRed", 0, "Joystick.HK_GuitarGripRed", true}, {"HKJoy_GuitarGripYellow", 0, "Joystick.HK_GuitarGripYellow", true}, {"HKJoy_GuitarGripBlue", 0, "Joystick.HK_GuitarGripBlue", true}, + {"HKJoy_Reload", 0, "Joystick.HK_Reload", true}, {"JoystickID", 0, "JoystickID", true}, diff --git a/src/frontend/qt_sdl/EmuInstance.h b/src/frontend/qt_sdl/EmuInstance.h index c8e756ea6e..e1648d2687 100755 --- a/src/frontend/qt_sdl/EmuInstance.h +++ b/src/frontend/qt_sdl/EmuInstance.h @@ -55,6 +55,7 @@ enum HK_GuitarGripRed, HK_GuitarGripYellow, HK_GuitarGripBlue, + HK_Reload, HK_MAX }; diff --git a/src/frontend/qt_sdl/EmuInstanceInput.cpp b/src/frontend/qt_sdl/EmuInstanceInput.cpp index 866eb29ab5..e577999f7e 100644 --- a/src/frontend/qt_sdl/EmuInstanceInput.cpp +++ b/src/frontend/qt_sdl/EmuInstanceInput.cpp @@ -66,7 +66,8 @@ const char* EmuInstance::hotkeyNames[HK_MAX] = "HK_GuitarGripGreen", "HK_GuitarGripRed", "HK_GuitarGripYellow", - "HK_GuitarGripBlue" + "HK_GuitarGripBlue", + "HK_Reload" }; std::shared_ptr EmuInstance::joyMutexGlobal = nullptr; diff --git a/src/frontend/qt_sdl/EmuThread.cpp b/src/frontend/qt_sdl/EmuThread.cpp index e754d982aa..184927c183 100755 --- a/src/frontend/qt_sdl/EmuThread.cpp +++ b/src/frontend/qt_sdl/EmuThread.cpp @@ -78,6 +78,7 @@ void EmuThread::attachWindow(MainWindow* window) connect(this, SIGNAL(autoScreenSizingChange(int)), window->panel, SLOT(onAutoScreenSizingChanged(int))); connect(this, SIGNAL(windowFullscreenToggle()), window, SLOT(onFullscreenToggled())); connect(this, SIGNAL(screenEmphasisToggle()), window, SLOT(onScreenEmphasisToggled())); + connect(this, SIGNAL(reloadMostRecentROM()), window, SLOT(onReloadMostRecentROM())); if (window->winHasMenu()) { @@ -96,6 +97,7 @@ void EmuThread::detachWindow(MainWindow* window) disconnect(this, SIGNAL(autoScreenSizingChange(int)), window->panel, SLOT(onAutoScreenSizingChanged(int))); disconnect(this, SIGNAL(windowFullscreenToggle()), window, SLOT(onFullscreenToggled())); disconnect(this, SIGNAL(screenEmphasisToggle()), window, SLOT(onScreenEmphasisToggled())); + disconnect(this, SIGNAL(reloadMostRecentROM()), window, SLOT(onReloadMostRecentROM())); if (window->winHasMenu()) { @@ -158,6 +160,8 @@ void EmuThread::run() emuInstance->inputProcess(); + if (emuInstance->hotkeyPressed(HK_Reload)) emit reloadMostRecentROM(); + if (emuInstance->hotkeyPressed(HK_FrameLimitToggle)) emit windowLimitFPSChange(); if (emuInstance->hotkeyPressed(HK_Pause)) emuTogglePause(); diff --git a/src/frontend/qt_sdl/EmuThread.h b/src/frontend/qt_sdl/EmuThread.h index 7a7f060052..814f05acf6 100755 --- a/src/frontend/qt_sdl/EmuThread.h +++ b/src/frontend/qt_sdl/EmuThread.h @@ -84,6 +84,7 @@ class EmuThread : public QThread msg_ImportSavefile, msg_EnableCheats, + msg_EmuReload, }; struct Message @@ -157,6 +158,7 @@ class EmuThread : public QThread void autoScreenSizingChange(int sizing); void windowFullscreenToggle(); + void reloadMostRecentROM(); void swapScreensToggle(); void screenEmphasisToggle(); diff --git a/src/frontend/qt_sdl/InputConfig/InputConfigDialog.h b/src/frontend/qt_sdl/InputConfig/InputConfigDialog.h index 0dd384429f..d1111ed964 100644 --- a/src/frontend/qt_sdl/InputConfig/InputConfigDialog.h +++ b/src/frontend/qt_sdl/InputConfig/InputConfigDialog.h @@ -67,7 +67,8 @@ static constexpr std::initializer_list hk_general = HK_SwapScreenEmphasis, HK_PowerButton, HK_VolumeUp, - HK_VolumeDown + HK_VolumeDown, + HK_Reload }; static constexpr std::initializer_list hk_general_labels = @@ -87,7 +88,8 @@ static constexpr std::initializer_list hk_general_labels = "Swap screen emphasis", "DSi Power button", "DSi Volume up", - "DSi Volume down" + "DSi Volume down", + "Reload current ROM" }; static_assert(hk_general.size() == hk_general_labels.size()); diff --git a/src/frontend/qt_sdl/Window.cpp b/src/frontend/qt_sdl/Window.cpp index b5a9b69064..91a7788061 100755 --- a/src/frontend/qt_sdl/Window.cpp +++ b/src/frontend/qt_sdl/Window.cpp @@ -1495,6 +1495,32 @@ void MainWindow::onClickRecentFile() updateCartInserted(false); } +void MainWindow::onReloadMostRecentROM() +{ + Log(LogLevel::Debug, "Reloading most recent ROM"); + QString filename = globalCfg.GetArray("RecentROM").GetQString(0); + + if (!verifySetup()) + return; + + const QStringList file = splitArchivePath(filename, true); + if (file.isEmpty()) + return; + + QString errorstr; + if (!emuThread->bootROM(file, errorstr)) + { + QMessageBox::critical(this, "melonDS", errorstr); + return; + } + + recentFileList.removeAll(filename); + recentFileList.prepend(filename); + updateRecentFilesMenu(); + + updateCartInserted(false); +} + void MainWindow::onBootFirmware() { if (!verifySetup()) diff --git a/src/frontend/qt_sdl/Window.h b/src/frontend/qt_sdl/Window.h index 678be7c9e9..7dd604efb0 100755 --- a/src/frontend/qt_sdl/Window.h +++ b/src/frontend/qt_sdl/Window.h @@ -172,6 +172,7 @@ private slots: void onUndoStateLoad(); void onImportSavefile(); void onQuit(); + void onReloadMostRecentROM(); void onPause(bool checked); void onReset(); From 1e21c5307d0f0f35e1581837184fd8c9368cfeb7 Mon Sep 17 00:00:00 2001 From: Eduardo Mosko Date: Sun, 7 Sep 2025 18:03:38 -0300 Subject: [PATCH 2/2] clean up --- src/frontend/qt_sdl/Config.cpp | 4 ++-- src/frontend/qt_sdl/EmuInstance.h | 2 +- src/frontend/qt_sdl/EmuInstanceInput.cpp | 2 +- src/frontend/qt_sdl/EmuThread.cpp | 3 +-- src/frontend/qt_sdl/EmuThread.h | 5 ++--- src/frontend/qt_sdl/InputConfig/InputConfigDialog.h | 4 ++-- src/frontend/qt_sdl/Window.cpp | 1 - src/frontend/qt_sdl/Window.h | 2 +- 8 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/frontend/qt_sdl/Config.cpp b/src/frontend/qt_sdl/Config.cpp index ca793de488..b7288f6fa7 100644 --- a/src/frontend/qt_sdl/Config.cpp +++ b/src/frontend/qt_sdl/Config.cpp @@ -174,7 +174,7 @@ LegacyEntry LegacyFile[] = {"HKKey_GuitarGripRed", 0, "Keyboard.HK_GuitarGripRed", true}, {"HKKey_GuitarGripYellow", 0, "Keyboard.HK_GuitarGripYellow", true}, {"HKKey_GuitarGripBlue", 0, "Keyboard.HK_GuitarGripBlue", true}, - {"HKKey_Reload", 0, "Keyboard.HK_Reload", true}, + {"HKKey_ReloadMostRecentROM", 0, "Keyboard.HK_ReloadMostRecentROM", true}, {"HKJoy_Lid", 0, "Joystick.HK_Lid", true}, {"HKJoy_Mic", 0, "Joystick.HK_Mic", true}, @@ -195,7 +195,7 @@ LegacyEntry LegacyFile[] = {"HKJoy_GuitarGripRed", 0, "Joystick.HK_GuitarGripRed", true}, {"HKJoy_GuitarGripYellow", 0, "Joystick.HK_GuitarGripYellow", true}, {"HKJoy_GuitarGripBlue", 0, "Joystick.HK_GuitarGripBlue", true}, - {"HKJoy_Reload", 0, "Joystick.HK_Reload", true}, + {"HKJoy_ReloadMostRecentROM", 0, "Joystick.HK_ReloadMostRecentROM", true}, {"JoystickID", 0, "JoystickID", true}, diff --git a/src/frontend/qt_sdl/EmuInstance.h b/src/frontend/qt_sdl/EmuInstance.h index e1648d2687..bf7167d226 100755 --- a/src/frontend/qt_sdl/EmuInstance.h +++ b/src/frontend/qt_sdl/EmuInstance.h @@ -55,7 +55,7 @@ enum HK_GuitarGripRed, HK_GuitarGripYellow, HK_GuitarGripBlue, - HK_Reload, + HK_ReloadMostRecentROM, HK_MAX }; diff --git a/src/frontend/qt_sdl/EmuInstanceInput.cpp b/src/frontend/qt_sdl/EmuInstanceInput.cpp index e577999f7e..df7d8f0a14 100644 --- a/src/frontend/qt_sdl/EmuInstanceInput.cpp +++ b/src/frontend/qt_sdl/EmuInstanceInput.cpp @@ -67,7 +67,7 @@ const char* EmuInstance::hotkeyNames[HK_MAX] = "HK_GuitarGripRed", "HK_GuitarGripYellow", "HK_GuitarGripBlue", - "HK_Reload" + "HK_ReloadMostRecentROM" }; std::shared_ptr EmuInstance::joyMutexGlobal = nullptr; diff --git a/src/frontend/qt_sdl/EmuThread.cpp b/src/frontend/qt_sdl/EmuThread.cpp index 184927c183..bfdd4b1395 100755 --- a/src/frontend/qt_sdl/EmuThread.cpp +++ b/src/frontend/qt_sdl/EmuThread.cpp @@ -160,12 +160,11 @@ void EmuThread::run() emuInstance->inputProcess(); - if (emuInstance->hotkeyPressed(HK_Reload)) emit reloadMostRecentROM(); - if (emuInstance->hotkeyPressed(HK_FrameLimitToggle)) emit windowLimitFPSChange(); if (emuInstance->hotkeyPressed(HK_Pause)) emuTogglePause(); if (emuInstance->hotkeyPressed(HK_Reset)) emuReset(); + if (emuInstance->hotkeyPressed(HK_ReloadMostRecentROM)) emit reloadMostRecentROM(); if (emuInstance->hotkeyPressed(HK_FrameStep)) emuFrameStep(); if (emuInstance->hotkeyPressed(HK_FullscreenToggle)) emit windowFullscreenToggle(); diff --git a/src/frontend/qt_sdl/EmuThread.h b/src/frontend/qt_sdl/EmuThread.h index 814f05acf6..f2f54a48ec 100755 --- a/src/frontend/qt_sdl/EmuThread.h +++ b/src/frontend/qt_sdl/EmuThread.h @@ -83,8 +83,7 @@ class EmuThread : public QThread msg_ImportSavefile, - msg_EnableCheats, - msg_EmuReload, + msg_EnableCheats }; struct Message @@ -158,7 +157,7 @@ class EmuThread : public QThread void autoScreenSizingChange(int sizing); void windowFullscreenToggle(); - void reloadMostRecentROM(); + void reloadMostRecentROM(); void swapScreensToggle(); void screenEmphasisToggle(); diff --git a/src/frontend/qt_sdl/InputConfig/InputConfigDialog.h b/src/frontend/qt_sdl/InputConfig/InputConfigDialog.h index d1111ed964..c477df061f 100644 --- a/src/frontend/qt_sdl/InputConfig/InputConfigDialog.h +++ b/src/frontend/qt_sdl/InputConfig/InputConfigDialog.h @@ -68,7 +68,7 @@ static constexpr std::initializer_list hk_general = HK_PowerButton, HK_VolumeUp, HK_VolumeDown, - HK_Reload + HK_ReloadMostRecentROM }; static constexpr std::initializer_list hk_general_labels = @@ -89,7 +89,7 @@ static constexpr std::initializer_list hk_general_labels = "DSi Power button", "DSi Volume up", "DSi Volume down", - "Reload current ROM" + "Reload most recent ROM" }; static_assert(hk_general.size() == hk_general_labels.size()); diff --git a/src/frontend/qt_sdl/Window.cpp b/src/frontend/qt_sdl/Window.cpp index 91a7788061..9aafbbb302 100755 --- a/src/frontend/qt_sdl/Window.cpp +++ b/src/frontend/qt_sdl/Window.cpp @@ -1497,7 +1497,6 @@ void MainWindow::onClickRecentFile() void MainWindow::onReloadMostRecentROM() { - Log(LogLevel::Debug, "Reloading most recent ROM"); QString filename = globalCfg.GetArray("RecentROM").GetQString(0); if (!verifySetup()) diff --git a/src/frontend/qt_sdl/Window.h b/src/frontend/qt_sdl/Window.h index 7dd604efb0..9414705b93 100755 --- a/src/frontend/qt_sdl/Window.h +++ b/src/frontend/qt_sdl/Window.h @@ -172,10 +172,10 @@ private slots: void onUndoStateLoad(); void onImportSavefile(); void onQuit(); - void onReloadMostRecentROM(); void onPause(bool checked); void onReset(); + void onReloadMostRecentROM(); void onStop(); void onFrameStep(); void onOpenPowerManagement();