diff --git a/rpcs3/rpcs3qt/game_list_frame.cpp b/rpcs3/rpcs3qt/game_list_frame.cpp index da1e22f31c..f28dd553c0 100644 --- a/rpcs3/rpcs3qt/game_list_frame.cpp +++ b/rpcs3/rpcs3qt/game_list_frame.cpp @@ -1059,7 +1059,7 @@ void game_list_frame::ShowContextMenu(const QPoint &pos) connect(configure, &QAction::triggered, [=, this]() { settings_dialog dlg(m_gui_settings, m_emu_settings, 0, this, &currGame); - if (dlg.exec() == QDialog::Accepted) + connect(&dlg, &settings_dialog::EmuSettingsApplied, [this, gameinfo]() { if (!gameinfo->hasCustomConfig) { @@ -1067,7 +1067,8 @@ void game_list_frame::ShowContextMenu(const QPoint &pos) ShowCustomConfigIcon(gameinfo); } Q_EMIT NotifyEmuSettingsChange(); - } + }); + dlg.exec(); }); connect(pad_configure, &QAction::triggered, [=, this]() { diff --git a/rpcs3/rpcs3qt/main_window.cpp b/rpcs3/rpcs3qt/main_window.cpp index 9d1ce540f3..100e15745b 100644 --- a/rpcs3/rpcs3qt/main_window.cpp +++ b/rpcs3/rpcs3qt/main_window.cpp @@ -1333,8 +1333,8 @@ void main_window::CreateConnects() connect(&dlg, &settings_dialog::GuiSettingsSyncRequest, this, &main_window::ConfigureGuiFromSettings); connect(&dlg, &settings_dialog::GuiStylesheetRequest, this, &main_window::RequestGlobalStylesheetChange); connect(&dlg, &settings_dialog::GuiRepaintRequest, this, &main_window::RepaintGui); - connect(&dlg, &settings_dialog::accepted, this, &main_window::NotifyEmuSettingsChange); - connect(&dlg, &settings_dialog::accepted, m_logFrame, &log_frame::LoadSettings); + connect(&dlg, &settings_dialog::EmuSettingsApplied, this, &main_window::NotifyEmuSettingsChange); + connect(&dlg, &settings_dialog::EmuSettingsApplied, m_logFrame, &log_frame::LoadSettings); dlg.exec(); }; diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index 3422758e69..8f865ce0c7 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -92,10 +92,11 @@ settings_dialog::settings_dialog(std::shared_ptr guiSettings, std: m_discord_state = xgui_settings->GetValue(gui::m_discordState).toString(); // Various connects - connect(ui->buttonBox, &QDialogButtonBox::accepted, [this, use_discord_old = m_use_discord, discord_state_old = m_discord_state] + + const auto apply_configs = [this, use_discord_old = m_use_discord, discord_state_old = m_discord_state](bool do_exit) { std::set selectedlle; - for (int i = 0; illeList->count(); ++i) + for (int i = 0; i < ui->lleList->count(); ++i) { const auto& item = ui->lleList->item(i); if (item->checkState() != Qt::CheckState::Unchecked) @@ -106,7 +107,13 @@ settings_dialog::settings_dialog(std::shared_ptr guiSettings, std: std::vector selected_ls = std::vector(selectedlle.begin(), selectedlle.end()); xemu_settings->SaveSelectedLibraries(selected_ls); xemu_settings->SaveSettings(); - accept(); + + if (do_exit) + { + accept(); + } + + Q_EMIT EmuSettingsApplied(); // Discord Settings can be saved regardless of WITH_DISCORD_RPC xgui_settings->SetValue(gui::m_richPresence, m_use_discord); @@ -130,6 +137,18 @@ settings_dialog::settings_dialog(std::shared_ptr guiSettings, std: discord::update_presence(sstr(m_discord_state), "Idle", false); } #endif + }; + + connect(ui->buttonBox, &QDialogButtonBox::clicked, [=, this](QAbstractButton* button) + { + if (button == ui->buttonBox->button(QDialogButtonBox::Save)) + { + apply_configs(true); + } + else if (button == ui->buttonBox->button(QDialogButtonBox::Apply)) + { + apply_configs(false); + } }); connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &QWidget::close); diff --git a/rpcs3/rpcs3qt/settings_dialog.h b/rpcs3/rpcs3qt/settings_dialog.h index 7d2d12654b..b61af4604d 100644 --- a/rpcs3/rpcs3qt/settings_dialog.h +++ b/rpcs3/rpcs3qt/settings_dialog.h @@ -29,6 +29,7 @@ Q_SIGNALS: void GuiStylesheetRequest(const QString& path); void GuiSettingsSaveRequest(); void GuiRepaintRequest(); + void EmuSettingsApplied(); private Q_SLOTS: void OnBackupCurrentConfig(); void OnApplyConfig(); diff --git a/rpcs3/rpcs3qt/settings_dialog.ui b/rpcs3/rpcs3qt/settings_dialog.ui index 7f1f07dcb7..2a2b99b807 100644 --- a/rpcs3/rpcs3qt/settings_dialog.ui +++ b/rpcs3/rpcs3qt/settings_dialog.ui @@ -3220,7 +3220,7 @@ - QDialogButtonBox::Close|QDialogButtonBox::Save + QDialogButtonBox::Apply|QDialogButtonBox::Close|QDialogButtonBox::Save