@@ -892,28 +892,35 @@ void PCSX::GUI::close() {
892
892
893
893
void PCSX::GUI::saveCfg () {
894
894
if (g_system->getArgs ().isTestModeEnabled ()) return ;
895
- std::ofstream cfg (g_system->getPersistentDir () / " pcsx.json" );
896
- json j;
897
-
898
- if (m_fullscreen || glfwGetWindowAttrib (m_window, GLFW_ICONIFIED) > 0 ) {
899
- m_glfwPosX = settings.get <WindowPosX>();
900
- m_glfwPosY = settings.get <WindowPosY>();
901
- m_glfwSizeX = settings.get <WindowSizeX>();
902
- m_glfwSizeY = settings.get <WindowSizeY>();
903
- m_glfwMaximized = settings.get <WindowMaximized>();
904
- } else {
905
- glfwGetWindowPos (m_window, &m_glfwPosX, &m_glfwPosY);
906
- glfwGetWindowSize (m_window, &m_glfwSizeX, &m_glfwSizeY);
907
- m_glfwMaximized = glfwGetWindowAttrib (m_window, GLFW_MAXIMIZED) != 0 ;
908
- }
909
-
910
- j[" imgui" ] = ImGui::SaveIniSettingsToMemory (nullptr );
911
- j[" SPU" ] = PCSX::g_emulator->m_spu ->getCfg ();
912
- j[" emulator" ] = PCSX::g_emulator->settings .serialize ();
913
- j[" gui" ] = settings.serialize ();
914
- j[" loggers" ] = m_log.serialize ();
915
- j[" pads" ] = PCSX::g_emulator->m_pads ->getCfg ();
916
- cfg << std::setw (2 ) << j << std::endl;
895
+ std::filesystem::path cfgTmpPath = g_system->getPersistentDir () / " pcsx.json.tmp" ;
896
+ std::filesystem::path cfgPath = g_system->getPersistentDir () / " pcsx.json" ;
897
+ {
898
+ std::ofstream cfg (cfgTmpPath);
899
+ json j;
900
+
901
+ if (m_fullscreen || glfwGetWindowAttrib (m_window, GLFW_ICONIFIED) > 0 ) {
902
+ m_glfwPosX = settings.get <WindowPosX>();
903
+ m_glfwPosY = settings.get <WindowPosY>();
904
+ m_glfwSizeX = settings.get <WindowSizeX>();
905
+ m_glfwSizeY = settings.get <WindowSizeY>();
906
+ m_glfwMaximized = settings.get <WindowMaximized>();
907
+ } else {
908
+ glfwGetWindowPos (m_window, &m_glfwPosX, &m_glfwPosY);
909
+ glfwGetWindowSize (m_window, &m_glfwSizeX, &m_glfwSizeY);
910
+ m_glfwMaximized = glfwGetWindowAttrib (m_window, GLFW_MAXIMIZED) != 0 ;
911
+ }
912
+
913
+ j[" imgui" ] = ImGui::SaveIniSettingsToMemory (nullptr );
914
+ j[" SPU" ] = PCSX::g_emulator->m_spu ->getCfg ();
915
+ j[" emulator" ] = PCSX::g_emulator->settings .serialize ();
916
+ j[" gui" ] = settings.serialize ();
917
+ j[" loggers" ] = m_log.serialize ();
918
+ j[" pads" ] = PCSX::g_emulator->m_pads ->getCfg ();
919
+ cfg << std::setw (2 ) << j << std::endl;
920
+ }
921
+ if (std::filesystem::copy_file (cfgTmpPath, cfgPath, std::filesystem::copy_options::overwrite_existing)) {
922
+ std::filesystem::remove (cfgTmpPath);
923
+ }
917
924
}
918
925
919
926
void PCSX::GUI::glfwKeyCallback (GLFWwindow* window, int key, int scancode, int action, int mods) {
0 commit comments