diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2017-02-26 14:25:43 +0100 | 
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2017-02-26 14:26:14 +0100 | 
| commit | 19ef27d7f3d3b4df0e4c45a4e88d1a63186ffb76 (patch) | |
| tree | 9ee0346f9b737a5fabdefeda19aef208e31fdb91 /gui | |
| parent | 4dd645f1d8eee72b02c86346969edbb6452ac42b (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.cpp | 14 | 
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();  } | 
