From 303c83792cd034fc2bf40e71edde968c22df5324 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 27 Feb 2017 11:40:33 +0100 Subject: {base,options}-dialog: fix dialogs not saving In case of the options dialog, running close() in doOK() made it go into closeEvent(), going into doCancel(), and reloading the settings prior to them getting saved. It's time for a hotfix2 build. --- gui/options-dialog.cpp | 24 ++++++++++++++++-------- gui/options-dialog.hpp | 2 +- 2 files changed, 17 insertions(+), 9 deletions(-) (limited to 'gui') diff --git a/gui/options-dialog.cpp b/gui/options-dialog.cpp index 8e420a83..51da498a 100644 --- a/gui/options-dialog.cpp +++ b/gui/options-dialog.cpp @@ -145,6 +145,11 @@ OptionsDialog::OptionsDialog(std::function pause_keybindings) : } } +void OptionsDialog::closeEvent(QCloseEvent *) +{ + done(int(result())); +} + void OptionsDialog::bind_key(key_opts& kopts, QLabel* label) { kopts.button = -1; @@ -199,11 +204,11 @@ void OptionsDialog::bind_key(key_opts& kopts, QLabel* label) void OptionsDialog::doOK() { - if (!close()) // dialog was closed already - return; if (isHidden()) // close() can return true twice in a row it seems return; hide(); + if (!close()) // dialog was closed already + return; main.b->save(); ui.game_detector->save(); @@ -213,11 +218,11 @@ void OptionsDialog::doOK() void OptionsDialog::doCancel() { - if (!close()) // dialog was closed already - return; if (isHidden()) // close() can return true twice in a row it seems return; hide(); + if (!close()) // dialog was closed already + return; main.b->reload(); ui.game_detector->revert(); @@ -226,8 +231,11 @@ void OptionsDialog::doCancel() void OptionsDialog::done(int res) { - if (res == QDialog::Accepted) - doOK(); - else - doCancel(); + if (isVisible()) + { + if (res == QDialog::Accepted) + doOK(); + else + doCancel(); + } } diff --git a/gui/options-dialog.hpp b/gui/options-dialog.hpp index e9359b6d..dab919ed 100644 --- a/gui/options-dialog.hpp +++ b/gui/options-dialog.hpp @@ -18,7 +18,7 @@ private: main_settings main; std::function pause_keybindings; Ui::options_dialog ui; - void closeEvent(QCloseEvent *) override { doCancel(); } + void closeEvent(QCloseEvent *) override; static QString kopts_to_string(const key_opts& opts); private slots: void doOK(); -- cgit v1.2.3