From 19ef27d7f3d3b4df0e4c45a4e88d1a63186ffb76 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sun, 26 Feb 2017 14:25:43 +0100 Subject: {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. --- gui/options-dialog.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'gui') 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(); } -- cgit v1.2.3