summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--api/plugin-api.cpp10
-rw-r--r--api/plugin-api.hpp2
-rw-r--r--gui/options-dialog.cpp14
3 files changed, 23 insertions, 3 deletions
diff --git a/api/plugin-api.cpp b/api/plugin-api.cpp
index 1bf56200..100902eb 100644
--- a/api/plugin-api.cpp
+++ b/api/plugin-api.cpp
@@ -11,7 +11,13 @@ ITracker::~ITracker() {}
ITrackerDialog::~ITrackerDialog() {}
plugin_api::detail::BaseDialog::BaseDialog() {}
-void plugin_api::detail::BaseDialog::closeEvent(QCloseEvent*) { emit closing(); }
+
+void plugin_api::detail::BaseDialog::closeEvent(QCloseEvent*)
+{
+ if (isVisible())
+ emit closing();
+}
+
Metadata::Metadata() {}
IFilter::IFilter() {}
IFilterDialog::IFilterDialog() {}
@@ -19,3 +25,5 @@ IProtocol::IProtocol() {}
IProtocolDialog::IProtocolDialog() {}
ITracker::ITracker() {}
ITrackerDialog::ITrackerDialog() {}
+
+void plugin_api::detail::BaseDialog::done(int) { close(); hide(); }
diff --git a/api/plugin-api.hpp b/api/plugin-api.hpp
index e9de9dad..4c9dee2f 100644
--- a/api/plugin-api.hpp
+++ b/api/plugin-api.hpp
@@ -48,6 +48,8 @@ public:
void closeEvent(QCloseEvent *) override;
signals:
void closing();
+private slots:
+ void done(int) override;
};
} // ns
diff --git a/gui/options-dialog.cpp b/gui/options-dialog.cpp
index 356d7cef..8e420a83 100644
--- a/gui/options-dialog.cpp
+++ b/gui/options-dialog.cpp
@@ -199,18 +199,28 @@ 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();
+
main.b->save();
ui.game_detector->save();
set_disable_translation_state(ui.disable_translation->isChecked());
- close();
emit closing();
}
void OptionsDialog::doCancel()
{
+ if (!close()) // dialog was closed already
+ return;
+ if (isHidden()) // close() can return true twice in a row it seems
+ return;
+ hide();
+
main.b->reload();
ui.game_detector->revert();
- close();
emit closing();
}