diff --git a/src/frontend/qt_sdl/Config.cpp b/src/frontend/qt_sdl/Config.cpp index f767fcc92d..b7288f6fa7 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_ReloadMostRecentROM", 0, "Keyboard.HK_ReloadMostRecentROM", 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_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 c8e756ea6e..bf7167d226 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_ReloadMostRecentROM, HK_MAX }; diff --git a/src/frontend/qt_sdl/EmuInstanceInput.cpp b/src/frontend/qt_sdl/EmuInstanceInput.cpp index 866eb29ab5..df7d8f0a14 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_ReloadMostRecentROM" }; std::shared_ptr EmuInstance::joyMutexGlobal = nullptr; diff --git a/src/frontend/qt_sdl/EmuThread.cpp b/src/frontend/qt_sdl/EmuThread.cpp index e754d982aa..bfdd4b1395 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()) { @@ -162,6 +164,7 @@ void EmuThread::run() 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 7a7f060052..f2f54a48ec 100755 --- a/src/frontend/qt_sdl/EmuThread.h +++ b/src/frontend/qt_sdl/EmuThread.h @@ -83,7 +83,7 @@ class EmuThread : public QThread msg_ImportSavefile, - msg_EnableCheats, + msg_EnableCheats }; struct Message @@ -157,6 +157,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..c477df061f 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_ReloadMostRecentROM }; 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 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 b5a9b69064..9aafbbb302 100755 --- a/src/frontend/qt_sdl/Window.cpp +++ b/src/frontend/qt_sdl/Window.cpp @@ -1495,6 +1495,31 @@ void MainWindow::onClickRecentFile() updateCartInserted(false); } +void MainWindow::onReloadMostRecentROM() +{ + 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..9414705b93 100755 --- a/src/frontend/qt_sdl/Window.h +++ b/src/frontend/qt_sdl/Window.h @@ -175,6 +175,7 @@ private slots: void onPause(bool checked); void onReset(); + void onReloadMostRecentROM(); void onStop(); void onFrameStep(); void onOpenPowerManagement();