From 593f8506931d4763d9b55f930c4becb262bd3620 Mon Sep 17 00:00:00 2001 From: Eladash Date: Tue, 20 Jun 2023 19:22:59 +0300 Subject: [PATCH] Qt: Save UI settings and geometry safely on closeEvent --- rpcs3/rpcs3qt/debugger_frame.cpp | 3 +++ rpcs3/rpcs3qt/game_list_frame.cpp | 5 +++-- rpcs3/rpcs3qt/main_window.cpp | 4 +++- rpcs3/rpcs3qt/pad_settings_dialog.cpp | 14 +++++++++----- rpcs3/rpcs3qt/pad_settings_dialog.h | 1 + rpcs3/rpcs3qt/patch_manager_dialog.cpp | 9 ++++++++- rpcs3/rpcs3qt/patch_manager_dialog.h | 1 + rpcs3/rpcs3qt/rsx_debugger.cpp | 1 + rpcs3/rpcs3qt/save_manager_dialog.cpp | 1 + rpcs3/rpcs3qt/settings_dialog.cpp | 7 ++++++- rpcs3/rpcs3qt/settings_dialog.h | 1 + rpcs3/rpcs3qt/trophy_manager_dialog.cpp | 1 + 12 files changed, 38 insertions(+), 10 deletions(-) diff --git a/rpcs3/rpcs3qt/debugger_frame.cpp b/rpcs3/rpcs3qt/debugger_frame.cpp index 710101de7f..6fcfb9f35f 100644 --- a/rpcs3/rpcs3qt/debugger_frame.cpp +++ b/rpcs3/rpcs3qt/debugger_frame.cpp @@ -230,6 +230,9 @@ 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 0ed7f4b420..98a1f9867c 100644 --- a/rpcs3/rpcs3qt/game_list_frame.cpp +++ b/rpcs3/rpcs3qt/game_list_frame.cpp @@ -222,8 +222,6 @@ game_list_frame::~game_list_frame() WaitAndAbortRepaintThreads(); gui::utils::stop_future_watcher(m_parsing_watcher, true); gui::utils::stop_future_watcher(m_refresh_watcher, true); - - SaveSettings(); } void game_list_frame::OnColClicked(int col) @@ -2226,6 +2224,9 @@ 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/main_window.cpp b/rpcs3/rpcs3qt/main_window.cpp index e50acde837..51529b734c 100644 --- a/rpcs3/rpcs3qt/main_window.cpp +++ b/rpcs3/rpcs3qt/main_window.cpp @@ -109,7 +109,6 @@ main_window::main_window(std::shared_ptr gui_settings, std::shared main_window::~main_window() { - SaveWindowState(); } /* An init method is used so that RPCS3App can create the necessary connects before calling init (specifically the stylesheet connect). @@ -1667,6 +1666,8 @@ void main_window::SaveWindowState() const m_game_list_frame->SaveSettings(); // Save splitter state m_debugger_frame->SaveSettings(); + + m_gui_settings->sync(); } void main_window::RepaintThumbnailIcons() @@ -3204,6 +3205,7 @@ void main_window::closeEvent(QCloseEvent* closeEvent) Emu.GracefulShutdown(false); } + SaveWindowState(); Emu.Quit(true); } diff --git a/rpcs3/rpcs3qt/pad_settings_dialog.cpp b/rpcs3/rpcs3qt/pad_settings_dialog.cpp index 3d8b0625b8..ce20f2cbcc 100644 --- a/rpcs3/rpcs3qt/pad_settings_dialog.cpp +++ b/rpcs3/rpcs3qt/pad_settings_dialog.cpp @@ -220,18 +220,22 @@ pad_settings_dialog::pad_settings_dialog(std::shared_ptr gui_setti ChangeProfile(ui->chooseProfile->currentText()); } +void pad_settings_dialog::closeEvent(QCloseEvent* event) +{ + m_gui_settings->SetValue(gui::pads_geometry, saveGeometry()); + m_gui_settings->sync(); + + QDialog::closeEvent(event); +} + pad_settings_dialog::~pad_settings_dialog() { if (m_input_thread) { m_input_thread_state = input_thread_state::pausing; - auto& thread = *m_input_thread; - thread = thread_state::aborting; - thread(); + *m_input_thread = thread_state::finished; } - m_gui_settings->SetValue(gui::pads_geometry, saveGeometry()); - if (!Emu.IsStopped()) { pad::reset(Emu.GetTitleID()); diff --git a/rpcs3/rpcs3qt/pad_settings_dialog.h b/rpcs3/rpcs3qt/pad_settings_dialog.h index 903f87aff9..5d92b83285 100644 --- a/rpcs3/rpcs3qt/pad_settings_dialog.h +++ b/rpcs3/rpcs3qt/pad_settings_dialog.h @@ -236,4 +236,5 @@ protected: void mouseMoveEvent(QMouseEvent *event) override; void wheelEvent(QWheelEvent *event) override; bool eventFilter(QObject* object, QEvent* event) override; + void closeEvent(QCloseEvent* event) override; }; diff --git a/rpcs3/rpcs3qt/patch_manager_dialog.cpp b/rpcs3/rpcs3qt/patch_manager_dialog.cpp index 6ad5bac1e8..09a453f57d 100644 --- a/rpcs3/rpcs3qt/patch_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/patch_manager_dialog.cpp @@ -151,11 +151,18 @@ patch_manager_dialog::patch_manager_dialog(std::shared_ptr gui_set download_update(true, false); } -patch_manager_dialog::~patch_manager_dialog() +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(); + + QDialog::closeEvent(event); +} + +patch_manager_dialog::~patch_manager_dialog() +{ } int patch_manager_dialog::exec() diff --git a/rpcs3/rpcs3qt/patch_manager_dialog.h b/rpcs3/rpcs3qt/patch_manager_dialog.h index c49f6ab93e..537cdcd7cc 100644 --- a/rpcs3/rpcs3qt/patch_manager_dialog.h +++ b/rpcs3/rpcs3qt/patch_manager_dialog.h @@ -83,4 +83,5 @@ protected: void dragEnterEvent(QDragEnterEvent* event) override; void dragMoveEvent(QDragMoveEvent* event) override; void dragLeaveEvent(QDragLeaveEvent* event) override; + void closeEvent(QCloseEvent* event) override; }; diff --git a/rpcs3/rpcs3qt/rsx_debugger.cpp b/rpcs3/rpcs3qt/rsx_debugger.cpp index 5b0e939806..5e962a8bc3 100644 --- a/rpcs3/rpcs3qt/rsx_debugger.cpp +++ b/rpcs3/rpcs3qt/rsx_debugger.cpp @@ -267,6 +267,7 @@ void rsx_debugger::closeEvent(QCloseEvent* event) m_gui_settings->SetValue(gui::rsx_states, states); m_gui_settings->SetValue(gui::rsx_geometry, saveGeometry()); + m_gui_settings->sync(); QDialog::closeEvent(event); } diff --git a/rpcs3/rpcs3qt/save_manager_dialog.cpp b/rpcs3/rpcs3qt/save_manager_dialog.cpp index b4014a73ea..c6dda8f9b6 100644 --- a/rpcs3/rpcs3qt/save_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/save_manager_dialog.cpp @@ -589,6 +589,7 @@ void save_manager_dialog::SetIconSize(int size) 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_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index a81fe038d6..433b830d32 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -2365,9 +2365,14 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std } } -settings_dialog::~settings_dialog() +void settings_dialog::closeEvent(QCloseEvent* event) { m_gui_settings->SetValue(gui::cfg_geometry, saveGeometry()); + m_gui_settings->sync(); +} + +settings_dialog::~settings_dialog() +{ } void settings_dialog::EnhanceSlider(emu_settings_type settings_type, QSlider* slider, QLabel* label, const QString& label_text) const diff --git a/rpcs3/rpcs3qt/settings_dialog.h b/rpcs3/rpcs3qt/settings_dialog.h index 5a0d075063..a377811c18 100644 --- a/rpcs3/rpcs3qt/settings_dialog.h +++ b/rpcs3/rpcs3qt/settings_dialog.h @@ -64,4 +64,5 @@ private: void SubscribeDescription(QLabel* description); void SubscribeTooltip(QObject* object, const QString& tooltip); bool eventFilter(QObject* object, QEvent* event) override; + void closeEvent(QCloseEvent* event) override; }; diff --git a/rpcs3/rpcs3qt/trophy_manager_dialog.cpp b/rpcs3/rpcs3qt/trophy_manager_dialog.cpp index aa070c900e..3dd700274c 100644 --- a/rpcs3/rpcs3qt/trophy_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/trophy_manager_dialog.cpp @@ -1224,6 +1224,7 @@ void trophy_manager_dialog::closeEvent(QCloseEvent *event) 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(); QWidget::closeEvent(event); }