diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp index 114ce63e49d874983dc80daf2b1d92dffa69433c..fcf8fb2b7377d187c51a8ed7675494b359843dab 100644 --- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp +++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp @@ -290,7 +290,8 @@ SettingsDialog::SettingsDialog(QWidget *parent) : m_categoryList(new CategoryListView), m_headerLabel(new QLabel), m_running(false), - m_applied(false) + m_applied(false), + m_finished(false) { m_applied = false; @@ -507,6 +508,9 @@ void SettingsDialog::filter(const QString &text) void SettingsDialog::accept() { + if (m_finished) + return; + m_finished = true; disconnectTabWidgets(); m_applied = true; foreach (IOptionsPage *page, m_visitedPages) @@ -518,6 +522,9 @@ void SettingsDialog::accept() void SettingsDialog::reject() { + if (m_finished) + return; + m_finished = true; disconnectTabWidgets(); foreach (IOptionsPage *page, m_pages) page->finish(); @@ -571,6 +578,7 @@ bool SettingsDialog::execDialog() { if (!m_running) { m_running = true; + m_finished = false; exec(); m_running = false; m_instance = 0; diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.h b/src/plugins/coreplugin/dialogs/settingsdialog.h index 416961984cf54cc311971f166ab887cf26d607d2..63db6b6539423710b0d722061b4f20058670a926 100644 --- a/src/plugins/coreplugin/dialogs/settingsdialog.h +++ b/src/plugins/coreplugin/dialogs/settingsdialog.h @@ -113,6 +113,7 @@ private: QLabel *m_headerLabel; bool m_running; bool m_applied; + bool m_finished; QList<QEventLoop *> m_eventLoops; static QPointer<SettingsDialog> m_instance; };