diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index bfe3987e9..fbf7c0eae 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -413,10 +413,16 @@ void GMainWindow::InitializeSaveStateMenuActions() { ui.menu_Save_State->addAction(actions_save_state[i]); } - connect(ui.action_Load_from_Newest_Slot, &QAction::triggered, - [this] { actions_load_state[newest_slot - 1]->trigger(); }); - connect(ui.action_Save_to_Oldest_Slot, &QAction::triggered, - [this] { actions_save_state[oldest_slot - 1]->trigger(); }); + connect(ui.action_Load_from_Newest_Slot, &QAction::triggered, [this] { + UpdateSaveStates(); + if (newest_slot != 0) { + actions_load_state[newest_slot - 1]->trigger(); + } + }); + connect(ui.action_Save_to_Oldest_Slot, &QAction::triggered, [this] { + UpdateSaveStates(); + actions_save_state[oldest_slot - 1]->trigger(); + }); connect(ui.menu_Load_State->menuAction(), &QAction::hovered, this, &GMainWindow::UpdateSaveStates); diff --git a/src/core/hle/service/cam/cam.cpp b/src/core/hle/service/cam/cam.cpp index 491fbd326..a039e88e6 100644 --- a/src/core/hle/service/cam/cam.cpp +++ b/src/core/hle/service/cam/cam.cpp @@ -26,11 +26,16 @@ SERVICE_CONSTRUCT_IMPL(Service::CAM::Module) namespace Service::CAM { template -void Module::serialize(Archive& ar, const unsigned int) { +void Module::serialize(Archive& ar, const unsigned int file_version) { ar& cameras; ar& ports; ar& is_camera_reload_pending; - if (Archive::is_loading::value) { + if (file_version > 0) { + ar& initialized; + } else { + initialized = true; + } + if (Archive::is_loading::value && initialized) { for (int i = 0; i < NumCameras; i++) { LoadCameraImplementation(cameras[i], i); } @@ -1077,6 +1082,8 @@ void Module::Interface::DriverInitialize(Kernel::HLERequestContext& ctx) { port.Clear(); } + cam->initialized = true; + rb.Push(RESULT_SUCCESS); LOG_DEBUG(Service_CAM, "called"); @@ -1093,6 +1100,8 @@ void Module::Interface::DriverFinalize(Kernel::HLERequestContext& ctx) { camera.impl = nullptr; } + cam->initialized = false; + rb.Push(RESULT_SUCCESS); LOG_DEBUG(Service_CAM, "called"); diff --git a/src/core/hle/service/cam/cam.h b/src/core/hle/service/cam/cam.h index 4a43afd30..5fea2b3ca 100644 --- a/src/core/hle/service/cam/cam.h +++ b/src/core/hle/service/cam/cam.h @@ -757,6 +757,7 @@ private: void LoadCameraImplementation(CameraConfig& camera, int camera_id); Core::System& system; + bool initialized{}; std::array cameras; std::array ports; Core::TimingEventType* completion_event_callback; @@ -764,7 +765,7 @@ private: std::atomic is_camera_reload_pending{false}; template - void serialize(Archive& ar, const unsigned int); + void serialize(Archive& ar, const unsigned int file_version); friend class boost::serialization::access; }; @@ -775,4 +776,5 @@ void InstallInterfaces(Core::System& system); } // namespace Service::CAM SERVICE_CONSTRUCT(Service::CAM::Module) +BOOST_CLASS_VERSION(Service::CAM::Module, 1) BOOST_CLASS_VERSION(Service::CAM::Module::CameraConfig, 1)