diff options
| -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(); | 
