diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp index b31281f17c1..68cd613a4bf 100644 --- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp +++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp @@ -59,6 +59,13 @@ static const char pageKeyC[] = "General/LastPreferencePage"; const int categoryIconSize = 24; +namespace std { +template<> +struct default_delete { + void operator()(QEventLoop* p) { p->exit(); delete p; } // exit event loop +}; +} // namespace std + namespace Core { namespace Internal { @@ -426,10 +433,10 @@ private: Utils::FancyLineEdit *m_filterLineEdit; QListView *m_categoryList; QLabel *m_headerLabel; + std::vector> m_eventLoops; bool m_running = false; bool m_applied = false; bool m_finished = false; - QList m_eventLoops; }; static QPointer m_instance = nullptr; @@ -724,13 +731,8 @@ void SettingsDialog::done(int val) ICore::saveSettings(); // save all settings - // exit all additional event loops, see comment in execDialog() - QListIterator it(m_eventLoops); - it.toBack(); - while (it.hasPrevious()) { - QEventLoop *loop = it.previous(); - loop->exit(); - } + + m_eventLoops.erase(m_eventLoops.begin(), m_eventLoops.end()); // exit event loops in reverse order of addition QDialog::done(val); } @@ -759,9 +761,8 @@ bool SettingsDialog::execDialog() // a break point it will complain about missing helper, and offer the // option to open the settings dialog. // Keep the UI running by creating another event loop. - QEventLoop *loop = new QEventLoop(this); - m_eventLoops.append(loop); - loop->exec(); + m_eventLoops.emplace(m_eventLoops.begin(), std::make_unique()); + m_eventLoops.front()->exec(); } return m_applied; }