diff --git a/src/core/fullscreen_ui.cpp b/src/core/fullscreen_ui.cpp index ef7f78c00..88f3821a1 100644 --- a/src/core/fullscreen_ui.cpp +++ b/src/core/fullscreen_ui.cpp @@ -2431,7 +2431,7 @@ void FullscreenUI::DoCopyGameSettings() Settings temp_settings; temp_settings.Load(*GetEditingSettingsInterface(false)); - temp_settings.Save(*s_game_settings_interface); + temp_settings.Save(*s_game_settings_interface, true); SetSettingsChanged(s_game_settings_interface.get()); ShowToast("Game Settings Copied", fmt::format(FSUI_FSTR("Game settings initialized with global settings for '{}'."), diff --git a/src/core/settings.cpp b/src/core/settings.cpp index 66ef2175b..70a8cf469 100644 --- a/src/core/settings.cpp +++ b/src/core/settings.cpp @@ -428,7 +428,7 @@ void Settings::Load(SettingsInterface& si) #endif } -void Settings::Save(SettingsInterface& si) const +void Settings::Save(SettingsInterface& si, bool ignore_base) const { si.SetStringValue("Console", "Region", GetConsoleRegionName(region)); si.SetBoolValue("Console", "Enable8MBRAM", enable_8mb_ram); @@ -436,22 +436,27 @@ void Settings::Save(SettingsInterface& si) const si.SetFloatValue("Main", "EmulationSpeed", emulation_speed); si.SetFloatValue("Main", "FastForwardSpeed", fast_forward_speed); si.SetFloatValue("Main", "TurboSpeed", turbo_speed); - si.SetBoolValue("Main", "SyncToHostRefreshRate", sync_to_host_refresh_rate); - si.SetBoolValue("Main", "IncreaseTimerResolution", increase_timer_resolution); - si.SetBoolValue("Main", "InhibitScreensaver", inhibit_screensaver); - si.SetBoolValue("Main", "StartPaused", start_paused); - si.SetBoolValue("Main", "StartFullscreen", start_fullscreen); - si.SetBoolValue("Main", "PauseOnFocusLoss", pause_on_focus_loss); - si.SetBoolValue("Main", "SaveStateOnExit", save_state_on_exit); - si.SetBoolValue("Main", "CreateSaveStateBackups", create_save_state_backups); - si.SetBoolValue("Main", "CompressSaveStates", compress_save_states); - si.SetBoolValue("Main", "ConfirmPowerOff", confim_power_off); + + if (!ignore_base) + { + si.SetBoolValue("Main", "SyncToHostRefreshRate", sync_to_host_refresh_rate); + si.SetBoolValue("Main", "IncreaseTimerResolution", increase_timer_resolution); + si.SetBoolValue("Main", "InhibitScreensaver", inhibit_screensaver); + si.SetBoolValue("Main", "StartPaused", start_paused); + si.SetBoolValue("Main", "StartFullscreen", start_fullscreen); + si.SetBoolValue("Main", "PauseOnFocusLoss", pause_on_focus_loss); + si.SetBoolValue("Main", "SaveStateOnExit", save_state_on_exit); + si.SetBoolValue("Main", "CreateSaveStateBackups", create_save_state_backups); + si.SetBoolValue("Main", "CompressSaveStates", compress_save_states); + si.SetBoolValue("Main", "ConfirmPowerOff", confim_power_off); + si.SetBoolValue("Main", "ApplyCompatibilitySettings", apply_compatibility_settings); + si.SetBoolValue("Main", "ApplyGameSettings", apply_game_settings); + si.SetBoolValue("Main", "EnableDiscordPresence", enable_discord_presence); + } + si.SetBoolValue("Main", "LoadDevicesFromSaveStates", load_devices_from_save_states); - si.SetBoolValue("Main", "ApplyCompatibilitySettings", apply_compatibility_settings); - si.SetBoolValue("Main", "ApplyGameSettings", apply_game_settings); si.SetBoolValue("Console", "EnableCheats", enable_cheats); si.SetBoolValue("Main", "DisableAllEnhancements", disable_all_enhancements); - si.SetBoolValue("Main", "EnableDiscordPresence", enable_discord_presence); si.SetBoolValue("Main", "RewindEnable", rewind_enable); si.SetFloatValue("Main", "RewindFrequency", rewind_save_frequency); si.SetIntValue("Main", "RewindSaveSlots", rewind_save_slots); @@ -470,12 +475,17 @@ void Settings::Save(SettingsInterface& si) const si.SetStringValue("GPU", "Adapter", gpu_adapter.c_str()); si.SetIntValue("GPU", "ResolutionScale", static_cast(gpu_resolution_scale)); si.SetIntValue("GPU", "Multisamples", static_cast(gpu_multisamples)); - si.SetBoolValue("GPU", "UseDebugDevice", gpu_use_debug_device); - si.SetBoolValue("GPU", "DisableShaderCache", gpu_disable_shader_cache); - si.SetBoolValue("GPU", "DisableDualSourceBlend", gpu_disable_dual_source_blend); - si.SetBoolValue("GPU", "DisableFramebufferFetch", gpu_disable_framebuffer_fetch); - si.SetBoolValue("GPU", "DisableTextureBuffers", gpu_disable_texture_buffers); - si.SetBoolValue("GPU", "DisableTextureCopyToSelf", gpu_disable_texture_copy_to_self); + + if (!ignore_base) + { + si.SetBoolValue("GPU", "UseDebugDevice", gpu_use_debug_device); + si.SetBoolValue("GPU", "DisableShaderCache", gpu_disable_shader_cache); + si.SetBoolValue("GPU", "DisableDualSourceBlend", gpu_disable_dual_source_blend); + si.SetBoolValue("GPU", "DisableFramebufferFetch", gpu_disable_framebuffer_fetch); + si.SetBoolValue("GPU", "DisableTextureBuffers", gpu_disable_texture_buffers); + si.SetBoolValue("GPU", "DisableTextureCopyToSelf", gpu_disable_texture_copy_to_self); + } + si.SetBoolValue("GPU", "PerSampleShading", gpu_per_sample_shading); si.SetBoolValue("GPU", "UseThread", gpu_use_thread); si.SetBoolValue("GPU", "ThreadedPresentation", gpu_threaded_presentation); @@ -521,21 +531,25 @@ void Settings::Save(SettingsInterface& si) const si.SetUIntValue("Display", "ScreenshotQuality", display_screenshot_quality); si.SetIntValue("Display", "CustomAspectRatioNumerator", display_aspect_ratio_custom_numerator); si.GetIntValue("Display", "CustomAspectRatioDenominator", display_aspect_ratio_custom_denominator); - si.SetBoolValue("Display", "ShowOSDMessages", display_show_osd_messages); - si.SetBoolValue("Display", "ShowFPS", display_show_fps); - si.SetBoolValue("Display", "ShowSpeed", display_show_speed); - si.SetBoolValue("Display", "ShowResolution", display_show_resolution); - si.SetBoolValue("Display", "ShowGPUStatistics", display_show_gpu_stats); - si.SetBoolValue("Display", "ShowCPU", display_show_cpu_usage); - si.SetBoolValue("Display", "ShowGPU", display_show_gpu_usage); - si.SetBoolValue("Display", "ShowFrameTimes", display_show_frame_times); - si.SetBoolValue("Display", "ShowStatusIndicators", display_show_status_indicators); - si.SetBoolValue("Display", "ShowInputs", display_show_inputs); - si.SetBoolValue("Display", "ShowEnhancements", display_show_enhancements); + if (!ignore_base) + { + si.SetBoolValue("Display", "ShowOSDMessages", display_show_osd_messages); + si.SetBoolValue("Display", "ShowFPS", display_show_fps); + si.SetBoolValue("Display", "ShowSpeed", display_show_speed); + si.SetBoolValue("Display", "ShowResolution", display_show_resolution); + si.SetBoolValue("Display", "ShowGPUStatistics", display_show_gpu_stats); + si.SetBoolValue("Display", "ShowCPU", display_show_cpu_usage); + si.SetBoolValue("Display", "ShowGPU", display_show_gpu_usage); + si.SetBoolValue("Display", "ShowFrameTimes", display_show_frame_times); + si.SetBoolValue("Display", "ShowStatusIndicators", display_show_status_indicators); + si.SetBoolValue("Display", "ShowInputs", display_show_inputs); + si.SetBoolValue("Display", "ShowEnhancements", display_show_enhancements); + si.SetFloatValue("Display", "OSDScale", display_osd_scale); + } + si.SetBoolValue("Display", "DisplayAllFrames", display_all_frames); si.SetBoolValue("Display", "StretchVertically", display_stretch_vertically); si.SetFloatValue("Display", "MaxFPS", display_max_fps); - si.SetFloatValue("Display", "OSDScale", display_osd_scale); si.SetIntValue("CDROM", "ReadaheadSectors", cdrom_readahead_sectors); si.SetStringValue("CDROM", "MechaconVersion", GetCDROMMechVersionName(cdrom_mechacon_version)); @@ -558,10 +572,14 @@ void Settings::Save(SettingsInterface& si) const si.SetBoolValue("Audio", "DumpOnBoot", audio_dump_on_boot); si.SetBoolValue("Hacks", "UseOldMDECRoutines", use_old_mdec_routines); - si.SetIntValue("Hacks", "DMAMaxSliceTicks", dma_max_slice_ticks); - si.SetIntValue("Hacks", "DMAHaltTicks", dma_halt_ticks); - si.SetIntValue("Hacks", "GPUFIFOSize", gpu_fifo_size); - si.SetIntValue("Hacks", "GPUMaxRunAhead", gpu_max_run_ahead); + + if (!ignore_base) + { + si.SetIntValue("Hacks", "DMAMaxSliceTicks", dma_max_slice_ticks); + si.SetIntValue("Hacks", "DMAHaltTicks", dma_halt_ticks); + si.SetIntValue("Hacks", "GPUFIFOSize", gpu_fifo_size); + si.SetIntValue("Hacks", "GPUMaxRunAhead", gpu_max_run_ahead); + } si.SetBoolValue("PCDrv", "Enabled", pcdrv_enable); si.SetBoolValue("PCDrv", "EnableWrites", pcdrv_enable_writes); @@ -603,23 +621,26 @@ void Settings::Save(SettingsInterface& si) const si.SetIntValue("Cheevos", "NotificationsDuration", achievements_notification_duration); si.SetIntValue("Cheevos", "LeaderboardsDuration", achievements_leaderboard_duration); - si.SetStringValue("Logging", "LogLevel", GetLogLevelName(log_level)); - si.SetStringValue("Logging", "LogFilter", log_filter.c_str()); - si.SetBoolValue("Logging", "LogTimestamps", log_timestamps); - si.SetBoolValue("Logging", "LogToConsole", log_to_console); - si.SetBoolValue("Logging", "LogToDebug", log_to_debug); - si.SetBoolValue("Logging", "LogToWindow", log_to_window); - si.SetBoolValue("Logging", "LogToFile", log_to_file); + if (!ignore_base) + { + si.SetStringValue("Logging", "LogLevel", GetLogLevelName(log_level)); + si.SetStringValue("Logging", "LogFilter", log_filter.c_str()); + si.SetBoolValue("Logging", "LogTimestamps", log_timestamps); + si.SetBoolValue("Logging", "LogToConsole", log_to_console); + si.SetBoolValue("Logging", "LogToDebug", log_to_debug); + si.SetBoolValue("Logging", "LogToWindow", log_to_window); + si.SetBoolValue("Logging", "LogToFile", log_to_file); - si.SetBoolValue("Debug", "ShowVRAM", debugging.show_vram); - si.SetBoolValue("Debug", "DumpCPUToVRAMCopies", debugging.dump_cpu_to_vram_copies); - si.SetBoolValue("Debug", "DumpVRAMToCPUCopies", debugging.dump_vram_to_cpu_copies); - si.SetBoolValue("Debug", "ShowGPUState", debugging.show_gpu_state); - si.SetBoolValue("Debug", "ShowCDROMState", debugging.show_cdrom_state); - si.SetBoolValue("Debug", "ShowSPUState", debugging.show_spu_state); - si.SetBoolValue("Debug", "ShowTimersState", debugging.show_timers_state); - si.SetBoolValue("Debug", "ShowMDECState", debugging.show_mdec_state); - si.SetBoolValue("Debug", "ShowDMAState", debugging.show_dma_state); + si.SetBoolValue("Debug", "ShowVRAM", debugging.show_vram); + si.SetBoolValue("Debug", "DumpCPUToVRAMCopies", debugging.dump_cpu_to_vram_copies); + si.SetBoolValue("Debug", "DumpVRAMToCPUCopies", debugging.dump_vram_to_cpu_copies); + si.SetBoolValue("Debug", "ShowGPUState", debugging.show_gpu_state); + si.SetBoolValue("Debug", "ShowCDROMState", debugging.show_cdrom_state); + si.SetBoolValue("Debug", "ShowSPUState", debugging.show_spu_state); + si.SetBoolValue("Debug", "ShowTimersState", debugging.show_timers_state); + si.SetBoolValue("Debug", "ShowMDECState", debugging.show_mdec_state); + si.SetBoolValue("Debug", "ShowDMAState", debugging.show_dma_state); + } si.SetBoolValue("TextureReplacements", "EnableVRAMWriteReplacements", texture_replacements.enable_vram_write_replacements); @@ -633,6 +654,33 @@ void Settings::Save(SettingsInterface& si) const texture_replacements.dump_vram_write_height_threshold); } +void Settings::Clear(SettingsInterface& si) +{ + si.ClearSection("Main"); + si.ClearSection("Console"); + si.ClearSection("CPU"); + si.ClearSection("GPU"); + si.ClearSection("Display"); + si.ClearSection("CDROM"); + si.ClearSection("Audio"); + si.ClearSection("Hacks"); + si.ClearSection("PCDrv"); + si.ClearSection("BIOS"); + + for (u32 i = 0; i < NUM_CONTROLLER_AND_CARD_PORTS; i++) + si.ClearSection(Controller::GetSettingsSection(i).c_str()); + + si.ClearSection("MemoryCards"); + + // Can't wipe out this section, because input profiles. + si.DeleteValue("ControllerPorts", "MultitapMode"); + + si.ClearSection("Cheevos"); + si.ClearSection("Logging"); + si.ClearSection("Debug"); + si.ClearSection("TextureReplacements"); +} + void Settings::FixIncompatibleSettings(bool display_osd_messages) { if (g_settings.disable_all_enhancements) diff --git a/src/core/settings.h b/src/core/settings.h index 803ba2abe..9a9904829 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -341,7 +341,8 @@ struct Settings }; void Load(SettingsInterface& si); - void Save(SettingsInterface& si) const; + void Save(SettingsInterface& si, bool ignore_base) const; + static void Clear(SettingsInterface& si); void FixIncompatibleSettings(bool display_osd_messages); diff --git a/src/core/system.cpp b/src/core/system.cpp index c73736813..ea2f5362f 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -975,7 +975,7 @@ void System::SetDefaultSettings(SettingsInterface& si) for (u32 i = 0; i < NUM_CONTROLLER_AND_CARD_PORTS; i++) temp.controller_types[i] = g_settings.controller_types[i]; - temp.Save(si); + temp.Save(si, false); } void System::ApplySettings(bool display_osd_messages) diff --git a/src/duckstation-nogui/nogui_host.cpp b/src/duckstation-nogui/nogui_host.cpp index 2d9b7b6be..126ac4de7 100644 --- a/src/duckstation-nogui/nogui_host.cpp +++ b/src/duckstation-nogui/nogui_host.cpp @@ -724,7 +724,7 @@ void NoGUIHost::CPUThreadMainLoop() Host::PumpMessagesOnCPUThread(); System::Internal::IdlePollUpdate(); System::PresentDisplay(false); - if (!g_gpu_device->IsVsyncEnabled()) + if (!g_gpu_device->IsVSyncActive()) g_gpu_device->ThrottlePresentation(); } } diff --git a/src/duckstation-qt/mainwindow.cpp b/src/duckstation-qt/mainwindow.cpp index 02bf38ab7..2e9392d48 100644 --- a/src/duckstation-qt/mainwindow.cpp +++ b/src/duckstation-qt/mainwindow.cpp @@ -2737,7 +2737,7 @@ bool MainWindow::requestShutdown(bool allow_confirm /* = true */, bool allow_sav save_state &= allow_save_to_state; // Only confirm on UI thread because we need to display a msgbox. - if (!m_is_closing && allow_confirm && g_settings.confim_power_off) + if (!m_is_closing && allow_confirm && Host::GetBaseBoolSettingValue("Main", "ConfirmPowerOff", true)) { SystemLock lock(pauseAndLockSystem()); diff --git a/src/duckstation-qt/settingswindow.cpp b/src/duckstation-qt/settingswindow.cpp index 98f19efc3..03df1b445 100644 --- a/src/duckstation-qt/settingswindow.cpp +++ b/src/duckstation-qt/settingswindow.cpp @@ -43,10 +43,11 @@ SettingsWindow::SettingsWindow() : QWidget() m_ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); addPages(); + connectUi(); } SettingsWindow::SettingsWindow(const std::string& path, const std::string& serial, DiscRegion region, - const GameDatabase::Entry* entry, std::unique_ptr sif) + const GameDatabase::Entry* entry, std::unique_ptr sif) : QWidget(), m_sif(std::move(sif)) { m_ui.setupUi(this); @@ -57,6 +58,7 @@ SettingsWindow::SettingsWindow(const std::string& path, const std::string& seria tr("Summary
This page shows information about the selected game, and allows you to " "validate your disc was dumped correctly.")); addPages(); + connectUi(); s_open_game_properties_dialogs.push_back(this); } @@ -167,10 +169,41 @@ void SettingsWindow::addPages() connect(m_advanced_settings, &AdvancedSettingsWidget::onShowDebugOptionsChanged, m_graphics_settings, &GraphicsSettingsWidget::onShowDebugSettingsChanged); +} +void SettingsWindow::reloadPages() +{ + const int min_count = isPerGameSettings() ? 1 : 0; + while (m_ui.settingsContainer->count() > min_count) + { + const int row = m_ui.settingsContainer->count() - 1; + + delete m_ui.settingsCategory->takeItem(row); + + QWidget* widget = m_ui.settingsContainer->widget(row); + m_ui.settingsContainer->removeWidget(widget); + delete widget; + } + + addPages(); +} + +void SettingsWindow::connectUi() +{ if (isPerGameSettings()) { - m_ui.buttonBox->button(QDialogButtonBox::RestoreDefaults)->setVisible(false); + m_ui.footerLayout->removeWidget(m_ui.restoreDefaults); + m_ui.restoreDefaults->deleteLater(); + m_ui.restoreDefaults = nullptr; + } + else + { + m_ui.footerLayout->removeWidget(m_ui.copyGlobalSettings); + m_ui.copyGlobalSettings->deleteLater(); + m_ui.copyGlobalSettings = nullptr; + m_ui.footerLayout->removeWidget(m_ui.clearGameSettings); + m_ui.clearGameSettings->deleteLater(); + m_ui.clearGameSettings = nullptr; } m_ui.settingsCategory->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); @@ -178,9 +211,13 @@ void SettingsWindow::addPages() m_ui.settingsContainer->setCurrentIndex(0); m_ui.helpText->setText(m_category_help_text[0]); connect(m_ui.settingsCategory, &QListWidget::currentRowChanged, this, &SettingsWindow::onCategoryCurrentRowChanged); - connect(m_ui.buttonBox, &QDialogButtonBox::rejected, this, &SettingsWindow::close); - connect(m_ui.buttonBox->button(QDialogButtonBox::RestoreDefaults), &QAbstractButton::clicked, this, - &SettingsWindow::onRestoreDefaultsClicked); + connect(m_ui.close, &QPushButton::clicked, this, &SettingsWindow::close); + if (m_ui.restoreDefaults) + connect(m_ui.restoreDefaults, &QPushButton::clicked, this, &SettingsWindow::onRestoreDefaultsClicked); + if (m_ui.copyGlobalSettings) + connect(m_ui.copyGlobalSettings, &QPushButton::clicked, this, &SettingsWindow::onCopyGlobalSettingsClicked); + if (m_ui.clearGameSettings) + connect(m_ui.clearGameSettings, &QPushButton::clicked, this, &SettingsWindow::onClearSettingsClicked); } void SettingsWindow::addWidget(QWidget* widget, QString title, QString icon, QString help_text) @@ -232,6 +269,56 @@ void SettingsWindow::onRestoreDefaultsClicked() g_emu_thread->setDefaultSettings(true, false); } +void SettingsWindow::onCopyGlobalSettingsClicked() +{ + if (!isPerGameSettings()) + return; + + if (QMessageBox::question( + this, tr("DuckStation Settings"), + tr("The configuration for this game will be replaced by the current global settings.\n\nAny current setting " + "values will be overwritten.\n\nDo you want to continue?"), + QMessageBox::Yes, QMessageBox::No) != QMessageBox::Yes) + { + return; + } + + { + auto lock = Host::GetSettingsLock(); + Settings temp; + temp.Load(*Host::Internal::GetBaseSettingsLayer()); + temp.Save(*m_sif.get(), true); + } + m_sif->Save(); + g_emu_thread->reloadGameSettings(); + + reloadPages(); + + QMessageBox::information(this, tr("DuckStation Settings"), tr("Per-game configuration copied from global settings.")); +} + +void SettingsWindow::onClearSettingsClicked() +{ + if (!isPerGameSettings()) + return; + + if (QMessageBox::question(this, tr("DuckStation Settings"), + tr("The configuration for this game will be cleared.\n\nAny current setting values will be " + "lost.\n\nDo you want to continue?"), + QMessageBox::Yes, QMessageBox::No) != QMessageBox::Yes) + { + return; + } + + Settings::Clear(*m_sif.get()); + m_sif->Save(); + g_emu_thread->reloadGameSettings(); + + reloadPages(); + + QMessageBox::information(this, tr("DuckStation Settings"), tr("Per-game configuration cleared.")); +} + void SettingsWindow::registerWidgetHelp(QObject* object, QString title, QString recommended_value, QString text) { // construct rich text with formatted description diff --git a/src/duckstation-qt/settingswindow.h b/src/duckstation-qt/settingswindow.h index 591f98060..4a30b6372 100644 --- a/src/duckstation-qt/settingswindow.h +++ b/src/duckstation-qt/settingswindow.h @@ -4,6 +4,8 @@ #pragma once #include "ui_settingswindow.h" +#include "util/ini_settings_interface.h" + #include "common/types.h" #include @@ -13,8 +15,6 @@ class QWheelEvent; -class SettingsInterface; - enum class DiscRegion : u8; namespace GameDatabase { @@ -41,7 +41,7 @@ class SettingsWindow final : public QWidget public: SettingsWindow(); SettingsWindow(const std::string& path, const std::string& serial, DiscRegion region, - const GameDatabase::Entry* entry, std::unique_ptr sif); + const GameDatabase::Entry* entry, std::unique_ptr sif); ~SettingsWindow(); static void openGamePropertiesDialog(const std::string& path, const std::string& serial, DiscRegion region); @@ -51,7 +51,7 @@ public: static bool setGameSettingsBoolForSerial(const std::string& serial, const char* section, const char* key, bool value); ALWAYS_INLINE bool isPerGameSettings() const { return static_cast(m_sif); } - ALWAYS_INLINE SettingsInterface* getSettingsInterface() const { return m_sif.get(); } + ALWAYS_INLINE INISettingsInterface* getSettingsInterface() const { return m_sif.get(); } ALWAYS_INLINE InterfaceSettingsWidget* getGeneralSettingsWidget() const { return m_general_settings; } ALWAYS_INLINE BIOSSettingsWidget* getBIOSSettingsWidget() const { return m_bios_settings; } @@ -98,6 +98,8 @@ public Q_SLOTS: private Q_SLOTS: void onCategoryCurrentRowChanged(int row); void onRestoreDefaultsClicked(); + void onCopyGlobalSettingsClicked(); + void onClearSettingsClicked(); protected: void closeEvent(QCloseEvent* event) override; @@ -109,13 +111,16 @@ private: MAX_SETTINGS_WIDGETS = 12 }; + void connectUi(); void addPages(); + void reloadPages(); + void addWidget(QWidget* widget, QString title, QString icon, QString help_text); bool handleWheelEvent(QWheelEvent* event); Ui::SettingsWindow m_ui; - std::unique_ptr m_sif; + std::unique_ptr m_sif; InterfaceSettingsWidget* m_general_settings = nullptr; BIOSSettingsWidget* m_bios_settings = nullptr; @@ -134,4 +139,6 @@ private: QObject* m_current_help_widget = nullptr; QMap m_widget_help_text_map; + + std::string m_game_list_filename; }; diff --git a/src/duckstation-qt/settingswindow.ui b/src/duckstation-qt/settingswindow.ui index b47a7b035..8b90c89fe 100644 --- a/src/duckstation-qt/settingswindow.ui +++ b/src/duckstation-qt/settingswindow.ui @@ -24,16 +24,6 @@ :/icons/duck.png:/icons/duck.png - - - - - 500 - 0 - - - - @@ -62,10 +52,13 @@ - - - - QDialogButtonBox::Close|QDialogButtonBox::RestoreDefaults + + + + + 500 + 0 + @@ -88,6 +81,51 @@ + + + + + + Restore Defaults + + + + + + + Copy Global Settings + + + + + + + Clear Settings + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + + + diff --git a/src/duckstation-regtest/regtest_host.cpp b/src/duckstation-regtest/regtest_host.cpp index c20a1d8ee..2406a977d 100644 --- a/src/duckstation-regtest/regtest_host.cpp +++ b/src/duckstation-regtest/regtest_host.cpp @@ -91,7 +91,7 @@ bool RegTestHost::InitializeConfig() // default settings for runner SettingsInterface& si = *s_base_settings_interface.get(); - g_settings.Save(si); + g_settings.Save(si, false); si.SetStringValue("GPU", "Renderer", Settings::GetRendererName(GPURenderer::Software)); si.SetBoolValue("GPU", "DisableShaderCache", true); si.SetStringValue("Pad1", "Type", Settings::GetControllerTypeName(ControllerType::AnalogController));