diff --git a/rpcs3/rpcs3qt/debugger_frame.cpp b/rpcs3/rpcs3qt/debugger_frame.cpp index 717bb07495..60752e6057 100644 --- a/rpcs3/rpcs3qt/debugger_frame.cpp +++ b/rpcs3/rpcs3qt/debugger_frame.cpp @@ -248,7 +248,6 @@ bool debugger_frame::eventFilter(QObject* object, QEvent* event) void debugger_frame::closeEvent(QCloseEvent* event) { SaveSettings(); - m_gui_settings->sync(); QDockWidget::closeEvent(event); Q_EMIT DebugFrameClosed(); diff --git a/rpcs3/rpcs3qt/game_list_frame.cpp b/rpcs3/rpcs3qt/game_list_frame.cpp index 9ec2752eb2..aaa5c5e174 100644 --- a/rpcs3/rpcs3qt/game_list_frame.cpp +++ b/rpcs3/rpcs3qt/game_list_frame.cpp @@ -70,9 +70,9 @@ game_list_frame::game_list_frame(std::shared_ptr gui_settings, std m_old_layout_is_list = m_is_list_layout; // Save factors for first setup - m_gui_settings->SetValue(gui::gl_iconColor, m_icon_color); - m_gui_settings->SetValue(gui::gl_marginFactor, m_margin_factor); - m_gui_settings->SetValue(gui::gl_textFactor, m_text_factor); + m_gui_settings->SetValue(gui::gl_iconColor, m_icon_color, false); + m_gui_settings->SetValue(gui::gl_marginFactor, m_margin_factor, false); + m_gui_settings->SetValue(gui::gl_textFactor, m_text_factor, true); m_game_dock = new QMainWindow(this); m_game_dock->setWindowFlags(Qt::Widget); @@ -260,8 +260,8 @@ void game_list_frame::OnColClicked(int col) } m_sort_column = col; - m_gui_settings->SetValue(gui::gl_sortAsc, m_col_sort_order == Qt::AscendingOrder); - m_gui_settings->SetValue(gui::gl_sortCol, col); + m_gui_settings->SetValue(gui::gl_sortAsc, m_col_sort_order == Qt::AscendingOrder, false); + m_gui_settings->SetValue(gui::gl_sortCol, col, true); m_game_list->sort(m_game_data.count(), m_sort_column, m_col_sort_order); } @@ -573,17 +573,17 @@ void game_list_frame::OnParsingFinished() // Read persistent_settings values const QString note = m_persistent_settings->GetValue(gui::persistent::notes, serial, "").toString(); const QString title = m_persistent_settings->GetValue(gui::persistent::titles, serial, "").toString().simplified(); - QString last_played = m_persistent_settings->GetValue(gui::persistent::last_played, serial, "").toString(); - quint64 playtime = m_persistent_settings->GetValue(gui::persistent::playtime, serial, 0).toULongLong(); + const QString last_played = m_persistent_settings->GetValue(gui::persistent::last_played, serial, "").toString(); + const quint64 playtime = m_persistent_settings->GetValue(gui::persistent::playtime, serial, 0).toULongLong(); // Set persistent_settings values if values exist if (!last_played.isEmpty()) { - m_persistent_settings->SetLastPlayed(serial, last_played); + m_persistent_settings->SetLastPlayed(serial, last_played, false); // No need to sync here. It would slow down the refresh anyway. } if (playtime > 0) { - m_persistent_settings->SetPlaytime(serial, playtime); + m_persistent_settings->SetPlaytime(serial, playtime, false); // No need to sync here. It would slow down the refresh anyway. } m_serials.insert(serial); @@ -851,9 +851,9 @@ void game_list_frame::SaveSettings() { m_gui_settings->SetGamelistColVisibility(static_cast(col), m_columnActs[col]->isChecked()); } - m_gui_settings->SetValue(gui::gl_sortCol, m_sort_column); - m_gui_settings->SetValue(gui::gl_sortAsc, m_col_sort_order == Qt::AscendingOrder); - m_gui_settings->SetValue(gui::gl_state, m_game_list->horizontalHeader()->saveState()); + m_gui_settings->SetValue(gui::gl_sortCol, m_sort_column, false); + m_gui_settings->SetValue(gui::gl_sortAsc, m_col_sort_order == Qt::AscendingOrder, false); + m_gui_settings->SetValue(gui::gl_state, m_game_list->horizontalHeader()->saveState(), true); } void game_list_frame::doubleClickedSlot(QTableWidgetItem *item) @@ -1627,9 +1627,8 @@ void game_list_frame::ShowContextMenu(const QPoint &pos) { if (QMessageBox::question(this, tr("Confirm Reset"), tr("Reset time played?\n\n%0 [%1]").arg(name).arg(serial)) == QMessageBox::Yes) { - m_persistent_settings->SetPlaytime(serial, 0); - m_persistent_settings->SetLastPlayed(serial, 0); - m_persistent_settings->sync(); + m_persistent_settings->SetPlaytime(serial, 0, false); + m_persistent_settings->SetLastPlayed(serial, 0, true); Refresh(); } }); @@ -2432,7 +2431,6 @@ void game_list_frame::FocusAndSelectFirstEntryIfNoneIs() void game_list_frame::closeEvent(QCloseEvent *event) { SaveSettings(); - m_gui_settings->sync(); QDockWidget::closeEvent(event); Q_EMIT GameListFrameClosed(); diff --git a/rpcs3/rpcs3qt/gs_frame.cpp b/rpcs3/rpcs3qt/gs_frame.cpp index 30e96189d3..05637522cb 100644 --- a/rpcs3/rpcs3qt/gs_frame.cpp +++ b/rpcs3/rpcs3qt/gs_frame.cpp @@ -637,9 +637,8 @@ void gs_frame::hide_on_close() { // Make sure not to save the hidden state, which is useless to us. const Visibility current_visibility = visibility(); - m_gui_settings->SetValue(gui::gs_visibility, current_visibility == Visibility::Hidden ? Visibility::AutomaticVisibility : current_visibility); - m_gui_settings->SetValue(gui::gs_geometry, geometry()); - m_gui_settings->sync(); + m_gui_settings->SetValue(gui::gs_visibility, current_visibility == Visibility::Hidden ? Visibility::AutomaticVisibility : current_visibility, false); + m_gui_settings->SetValue(gui::gs_geometry, geometry(), true); if (!g_progr.load()) { diff --git a/rpcs3/rpcs3qt/gui_application.cpp b/rpcs3/rpcs3qt/gui_application.cpp index 0373cfd451..75851834fd 100644 --- a/rpcs3/rpcs3qt/gui_application.cpp +++ b/rpcs3/rpcs3qt/gui_application.cpp @@ -166,8 +166,6 @@ bool gui_application::Init() { m_gui_settings->SetValue(gui::m_currentStylesheet, "Darker Style by TheMitoSan"); } - - m_gui_settings->sync(); } // Check maxfiles @@ -819,7 +817,7 @@ void gui_application::StartPlaytime(bool start_playtime = true) return; } - m_persistent_settings->SetLastPlayed(serial, QDateTime::currentDateTime().toString(gui::persistent::last_played_date_format)); + m_persistent_settings->SetLastPlayed(serial, QDateTime::currentDateTime().toString(gui::persistent::last_played_date_format), true); m_timer_playtime.start(); m_timer.start(10000); // Update every 10 seconds in case the emulation crashes } @@ -840,8 +838,8 @@ void gui_application::UpdatePlaytime() return; } - m_persistent_settings->AddPlaytime(serial, m_timer_playtime.restart()); - m_persistent_settings->SetLastPlayed(serial, QDateTime::currentDateTime().toString(gui::persistent::last_played_date_format)); + m_persistent_settings->AddPlaytime(serial, m_timer_playtime.restart(), false); + m_persistent_settings->SetLastPlayed(serial, QDateTime::currentDateTime().toString(gui::persistent::last_played_date_format), true); } void gui_application::StopPlaytime() @@ -858,8 +856,8 @@ void gui_application::StopPlaytime() return; } - m_persistent_settings->AddPlaytime(serial, m_timer_playtime.restart()); - m_persistent_settings->SetLastPlayed(serial, QDateTime::currentDateTime().toString(gui::persistent::last_played_date_format)); + m_persistent_settings->AddPlaytime(serial, m_timer_playtime.restart(), false); + m_persistent_settings->SetLastPlayed(serial, QDateTime::currentDateTime().toString(gui::persistent::last_played_date_format), true); m_timer_playtime.invalidate(); } diff --git a/rpcs3/rpcs3qt/log_frame.cpp b/rpcs3/rpcs3qt/log_frame.cpp index 6a29ba38e5..004eb32a84 100644 --- a/rpcs3/rpcs3qt/log_frame.cpp +++ b/rpcs3/rpcs3qt/log_frame.cpp @@ -273,10 +273,10 @@ void log_frame::CreateAndConnectActions() m_ansi_act_tty = new QAction(tr("ANSI Code (TTY)"), this); m_ansi_act_tty->setCheckable(true); connect(m_ansi_act_tty, &QAction::toggled, [this](bool checked) - { - m_gui_settings->SetValue(gui::l_ansi_code, checked); - m_ansi_tty = checked; - }); + { + m_gui_settings->SetValue(gui::l_ansi_code, checked); + m_ansi_tty = checked; + }); m_tty_channel_acts = new QActionGroup(this); // Special Channel: All diff --git a/rpcs3/rpcs3qt/main_window.cpp b/rpcs3/rpcs3qt/main_window.cpp index d69aa8abcd..df7035247e 100644 --- a/rpcs3/rpcs3qt/main_window.cpp +++ b/rpcs3/rpcs3qt/main_window.cpp @@ -1731,16 +1731,14 @@ void main_window::DecryptSPRXLibraries() void main_window::SaveWindowState() const { // Save gui settings - m_gui_settings->SetValue(gui::mw_geometry, saveGeometry()); - m_gui_settings->SetValue(gui::mw_windowState, saveState()); - m_gui_settings->SetValue(gui::mw_mwState, m_mw->saveState()); + m_gui_settings->SetValue(gui::mw_geometry, saveGeometry(), false); + m_gui_settings->SetValue(gui::mw_windowState, saveState(), false); + m_gui_settings->SetValue(gui::mw_mwState, m_mw->saveState(), true); // Save column settings m_game_list_frame->SaveSettings(); // Save splitter state m_debugger_frame->SaveSettings(); - - m_gui_settings->sync(); } void main_window::RepaintThumbnailIcons() diff --git a/rpcs3/rpcs3qt/pad_settings_dialog.cpp b/rpcs3/rpcs3qt/pad_settings_dialog.cpp index 1d3b09eac7..16f7771199 100644 --- a/rpcs3/rpcs3qt/pad_settings_dialog.cpp +++ b/rpcs3/rpcs3qt/pad_settings_dialog.cpp @@ -233,7 +233,6 @@ pad_settings_dialog::pad_settings_dialog(std::shared_ptr gui_setti void pad_settings_dialog::closeEvent(QCloseEvent* event) { m_gui_settings->SetValue(gui::pads_geometry, saveGeometry()); - m_gui_settings->sync(); QDialog::closeEvent(event); } diff --git a/rpcs3/rpcs3qt/patch_manager_dialog.cpp b/rpcs3/rpcs3qt/patch_manager_dialog.cpp index 51f61cf4f7..f924a49508 100644 --- a/rpcs3/rpcs3qt/patch_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/patch_manager_dialog.cpp @@ -154,9 +154,8 @@ patch_manager_dialog::patch_manager_dialog(std::shared_ptr gui_set void patch_manager_dialog::closeEvent(QCloseEvent* event) { // Save gui settings - m_gui_settings->SetValue(gui::pm_geometry, saveGeometry()); - m_gui_settings->SetValue(gui::pm_splitter_state, ui->splitter->saveState()); - m_gui_settings->sync(); + m_gui_settings->SetValue(gui::pm_geometry, saveGeometry(), false); + m_gui_settings->SetValue(gui::pm_splitter_state, ui->splitter->saveState(), true); QDialog::closeEvent(event); } diff --git a/rpcs3/rpcs3qt/persistent_settings.cpp b/rpcs3/rpcs3qt/persistent_settings.cpp index 4bf237f0b1..e8ea9152f0 100644 --- a/rpcs3/rpcs3qt/persistent_settings.cpp +++ b/rpcs3/rpcs3qt/persistent_settings.cpp @@ -11,16 +11,16 @@ persistent_settings::persistent_settings(QObject* parent) : settings(parent) m_settings.reset(new QSettings(ComputeSettingsDir() + gui::persistent::persistent_file_name + ".dat", QSettings::Format::IniFormat, parent)); } -void persistent_settings::SetPlaytime(const QString& serial, quint64 playtime) +void persistent_settings::SetPlaytime(const QString& serial, quint64 playtime, bool sync) { m_playtime[serial] = playtime; - SetValue(gui::persistent::playtime, serial, playtime); + SetValue(gui::persistent::playtime, serial, playtime, sync); } -void persistent_settings::AddPlaytime(const QString& serial, quint64 elapsed) +void persistent_settings::AddPlaytime(const QString& serial, quint64 elapsed, bool sync) { const quint64 playtime = GetValue(gui::persistent::playtime, serial, 0).toULongLong(); - SetPlaytime(serial, playtime + elapsed); + SetPlaytime(serial, playtime + elapsed, sync); } quint64 persistent_settings::GetPlaytime(const QString& serial) @@ -28,10 +28,10 @@ quint64 persistent_settings::GetPlaytime(const QString& serial) return m_playtime[serial]; } -void persistent_settings::SetLastPlayed(const QString& serial, const QString& date) +void persistent_settings::SetLastPlayed(const QString& serial, const QString& date, bool sync) { m_last_played[serial] = date; - SetValue(gui::persistent::last_played, serial, date); + SetValue(gui::persistent::last_played, serial, date, sync); } QString persistent_settings::GetLastPlayed(const QString& serial) diff --git a/rpcs3/rpcs3qt/persistent_settings.h b/rpcs3/rpcs3qt/persistent_settings.h index 6c038bb657..541a0d0126 100644 --- a/rpcs3/rpcs3qt/persistent_settings.h +++ b/rpcs3/rpcs3qt/persistent_settings.h @@ -38,11 +38,11 @@ public: QString GetCurrentUser(const QString& fallback) const; public Q_SLOTS: - void SetPlaytime(const QString& serial, quint64 playtime); - void AddPlaytime(const QString& serial, quint64 elapsed); + void SetPlaytime(const QString& serial, quint64 playtime, bool sync); + void AddPlaytime(const QString& serial, quint64 elapsed, bool sync); quint64 GetPlaytime(const QString& serial); - void SetLastPlayed(const QString& serial, const QString& date); + void SetLastPlayed(const QString& serial, const QString& date, bool sync); QString GetLastPlayed(const QString& serial); private: QMap m_playtime; diff --git a/rpcs3/rpcs3qt/rsx_debugger.cpp b/rpcs3/rpcs3qt/rsx_debugger.cpp index ea06da2508..e8d8bec3ea 100644 --- a/rpcs3/rpcs3qt/rsx_debugger.cpp +++ b/rpcs3/rpcs3qt/rsx_debugger.cpp @@ -265,9 +265,8 @@ void rsx_debugger::closeEvent(QCloseEvent* event) for (int i = 0; i < m_tw_rsx->count(); i++) states[QString::number(i)] = (static_cast(m_tw_rsx->widget(i)))->horizontalHeader()->saveState(); - m_gui_settings->SetValue(gui::rsx_states, states); - m_gui_settings->SetValue(gui::rsx_geometry, saveGeometry()); - m_gui_settings->sync(); + m_gui_settings->SetValue(gui::rsx_states, states, false); + m_gui_settings->SetValue(gui::rsx_geometry, saveGeometry(), true); QDialog::closeEvent(event); } diff --git a/rpcs3/rpcs3qt/save_manager_dialog.cpp b/rpcs3/rpcs3qt/save_manager_dialog.cpp index d6a0da030a..07b3f071e3 100644 --- a/rpcs3/rpcs3qt/save_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/save_manager_dialog.cpp @@ -585,13 +585,12 @@ void save_manager_dialog::SetIconSize(int size) { m_icon_size = QSize(size, size * 176 / 320); UpdateIcons(); - m_gui_settings->SetValue(gui::sd_icon_size, size); + m_gui_settings->SetValue(gui::sd_icon_size, size, false); // Don't sync while sliding } void save_manager_dialog::closeEvent(QCloseEvent *event) { m_gui_settings->SetValue(gui::sd_geometry, saveGeometry()); - m_gui_settings->sync(); QDialog::closeEvent(event); } diff --git a/rpcs3/rpcs3qt/settings.cpp b/rpcs3/rpcs3qt/settings.cpp index ebc5fb1918..74901561c2 100644 --- a/rpcs3/rpcs3qt/settings.cpp +++ b/rpcs3/rpcs3qt/settings.cpp @@ -32,19 +32,24 @@ QString settings::ComputeSettingsDir() return QString::fromStdString(fs::get_config_dir()) + "/GuiConfigs/"; } -void settings::RemoveValue(const QString& key, const QString& name) const +void settings::RemoveValue(const QString& key, const QString& name, bool sync) const { if (m_settings) { m_settings->beginGroup(key); m_settings->remove(name); m_settings->endGroup(); + + if (sync) + { + m_settings->sync(); + } } } -void settings::RemoveValue(const gui_save& entry) const +void settings::RemoveValue(const gui_save& entry, bool sync) const { - RemoveValue(entry.key, entry.name); + RemoveValue(entry.key, entry.name, sync); } QVariant settings::GetValue(const QString& key, const QString& name, const QVariant& def) const @@ -74,30 +79,35 @@ q_pair_list settings::Var2List(const QVariant& var) return list; } -void settings::SetValue(const gui_save& entry, const QVariant& value) const +void settings::SetValue(const gui_save& entry, const QVariant& value, bool sync) const { - if (m_settings) - { - m_settings->beginGroup(entry.key); - m_settings->setValue(entry.name, value); - m_settings->endGroup(); - } + SetValue(entry.key, entry.name, value, sync); } -void settings::SetValue(const QString& key, const QVariant& value) const +void settings::SetValue(const QString& key, const QVariant& value, bool sync) const { if (m_settings) { m_settings->setValue(key, value); + + if (sync) + { + m_settings->sync(); + } } } -void settings::SetValue(const QString& key, const QString& name, const QVariant& value) const +void settings::SetValue(const QString& key, const QString& name, const QVariant& value, bool sync) const { if (m_settings) { m_settings->beginGroup(key); m_settings->setValue(name, value); m_settings->endGroup(); + + if (sync) + { + m_settings->sync(); + } } } diff --git a/rpcs3/rpcs3qt/settings.h b/rpcs3/rpcs3qt/settings.h index ab8a53e1dd..8a7069d884 100644 --- a/rpcs3/rpcs3qt/settings.h +++ b/rpcs3/rpcs3qt/settings.h @@ -40,13 +40,13 @@ public: public Q_SLOTS: /** Remove entry */ - void RemoveValue(const QString& key, const QString& name) const; - void RemoveValue(const gui_save& entry) const; + void RemoveValue(const QString& key, const QString& name, bool sync = true) const; + void RemoveValue(const gui_save& entry, bool sync = true) const; /** Write value to entry */ - void SetValue(const gui_save& entry, const QVariant& value) const; - void SetValue(const QString& key, const QVariant& value) const; - void SetValue(const QString& key, const QString& name, const QVariant& value) const; + void SetValue(const gui_save& entry, const QVariant& value, bool sync = true) const; + void SetValue(const QString& key, const QVariant& value, bool sync = true) const; + void SetValue(const QString& key, const QString& name, const QVariant& value, bool sync = true) const; protected: static QString ComputeSettingsDir(); diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index 4b76699e36..1a23d5d388 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -200,8 +200,8 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std Q_EMIT EmuSettingsApplied(); // Discord Settings can be saved regardless of WITH_DISCORD_RPC - m_gui_settings->SetValue(gui::m_richPresence, m_use_discord); - m_gui_settings->SetValue(gui::m_discordState, m_discord_state); + m_gui_settings->SetValue(gui::m_richPresence, m_use_discord, false); + m_gui_settings->SetValue(gui::m_discordState, m_discord_state, true); #ifdef WITH_DISCORD_RPC if (m_use_discord != use_discord_old) @@ -2471,7 +2471,6 @@ void settings_dialog::refresh_countrybox() void settings_dialog::closeEvent([[maybe_unused]] QCloseEvent* event) { m_gui_settings->SetValue(gui::cfg_geometry, saveGeometry()); - m_gui_settings->sync(); } settings_dialog::~settings_dialog() diff --git a/rpcs3/rpcs3qt/shortcut_dialog.cpp b/rpcs3/rpcs3qt/shortcut_dialog.cpp index 47a6551e41..f7acaa2ef0 100644 --- a/rpcs3/rpcs3qt/shortcut_dialog.cpp +++ b/rpcs3/rpcs3qt/shortcut_dialog.cpp @@ -91,8 +91,9 @@ void shortcut_dialog::save() for (const auto& entry : m_values) { - m_gui_settings->SetValue(sc_settings.get_shortcut_gui_save(entry.first), entry.second); + m_gui_settings->SetValue(sc_settings.get_shortcut_gui_save(entry.first), entry.second, false); } + m_gui_settings->sync(); Q_EMIT saved(); } diff --git a/rpcs3/rpcs3qt/trophy_manager_dialog.cpp b/rpcs3/rpcs3qt/trophy_manager_dialog.cpp index 27a0ca0913..8150b7f042 100644 --- a/rpcs3/rpcs3qt/trophy_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/trophy_manager_dialog.cpp @@ -1300,11 +1300,10 @@ bool trophy_manager_dialog::eventFilter(QObject *object, QEvent *event) void trophy_manager_dialog::closeEvent(QCloseEvent *event) { // Save gui settings - m_gui_settings->SetValue(gui::tr_geometry, saveGeometry()); - m_gui_settings->SetValue(gui::tr_splitterState, m_splitter->saveState()); - m_gui_settings->SetValue(gui::tr_games_state, m_game_table->horizontalHeader()->saveState()); - m_gui_settings->SetValue(gui::tr_trophy_state, m_trophy_table->horizontalHeader()->saveState()); - m_gui_settings->sync(); + m_gui_settings->SetValue(gui::tr_geometry, saveGeometry(), false); + m_gui_settings->SetValue(gui::tr_splitterState, m_splitter->saveState(), false); + m_gui_settings->SetValue(gui::tr_games_state, m_game_table->horizontalHeader()->saveState(), false); + m_gui_settings->SetValue(gui::tr_trophy_state, m_trophy_table->horizontalHeader()->saveState(), true); QWidget::closeEvent(event); }