summaryrefslogtreecommitdiffhomepage
path: root/gui
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2017-02-26 14:25:43 +0100
committerStanislaw Halik <sthalik@misaki.pl>2017-02-26 14:26:14 +0100
commit19ef27d7f3d3b4df0e4c45a4e88d1a63186ffb76 (patch)
tree9ee0346f9b737a5fabdefeda19aef208e31fdb91 /gui
parent4dd645f1d8eee72b02c86346969edbb6452ac42b (diff)
{api/base,gui/options}-dialog: prevent closing without signal
Use hide() to avoid emitting idempotent events. There's isVisible() but no isClosed() or equivalent. Worse yet, close() can return true twice in a row, despite what docs for `bool QWidget::close()' say.
Diffstat (limited to 'gui')
-rw-r--r--gui/options-dialog.cpp14
1 files changed, 12 insertions, 2 deletions
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();
}