diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2017-02-27 11:40:33 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2017-02-27 11:42:28 +0100 |
commit | 303c83792cd034fc2bf40e71edde968c22df5324 (patch) | |
tree | 13df052f49cff97f1cb304de571c74a76bbe6a9b | |
parent | ea145f8c1cc188f20e066af78e4167036b3993de (diff) |
{base,options}-dialog: fix dialogs not savingopentrack-2.3.1_fix2
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.
-rw-r--r-- | api/plugin-api.cpp | 15 | ||||
-rw-r--r-- | gui/options-dialog.cpp | 24 | ||||
-rw-r--r-- | gui/options-dialog.hpp | 2 |
3 files changed, 29 insertions, 12 deletions
diff --git a/api/plugin-api.cpp b/api/plugin-api.cpp index 92602b11..20c24e62 100644 --- a/api/plugin-api.cpp +++ b/api/plugin-api.cpp @@ -1,5 +1,7 @@ #include "plugin-api.hpp" +using namespace plugin_api::detail; + // these exist so that vtable is emitted in a single compilation unit, not all of them. Metadata::~Metadata() {} @@ -10,9 +12,9 @@ IProtocolDialog::~IProtocolDialog() {} ITracker::~ITracker() {} ITrackerDialog::~ITrackerDialog() {} -plugin_api::detail::BaseDialog::BaseDialog() {} +BaseDialog::BaseDialog() {} -void plugin_api::detail::BaseDialog::closeEvent(QCloseEvent*) +void BaseDialog::closeEvent(QCloseEvent*) { if (isVisible()) { @@ -29,4 +31,11 @@ IProtocolDialog::IProtocolDialog() {} ITracker::ITracker() {} ITrackerDialog::ITrackerDialog() {} -void plugin_api::detail::BaseDialog::done(int) { close(); hide(); } +void BaseDialog::done(int) +{ + if (isVisible()) + { + hide(); + close(); + } +} 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<void(bool)> 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<void(bool)> 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(); |