Mercurial > hg > octave-nkf
diff libgui/src/main-window.cc @ 19839:5d0663bff506
maint: Periodic merge of gui-release to default.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 30 Jan 2015 16:06:14 -0500 |
parents | 37d37297acf8 101ce4eaa56c |
children | 83fb8c592a84 4197fc428c7d |
line wrap: on
line diff
--- a/libgui/src/main-window.cc +++ b/libgui/src/main-window.cc @@ -85,6 +85,7 @@ doc_browser_window (new documentation_dock_widget (this)), editor_window (create_default_editor (this)), workspace_window (new workspace_view (this)), + _settings_dlg (0), find_files_dlg (0), release_notes_window (0), community_news_window (0), @@ -150,6 +151,11 @@ delete release_notes_window; release_notes_window = 0; } + if (_settings_dlg) + { + delete _settings_dlg; + _settings_dlg = 0; + } if (community_news_window) { delete community_news_window; @@ -668,18 +674,31 @@ void main_window::process_settings_dialog_request (const QString& desired_tab) { - settings_dialog *settingsDialog = new settings_dialog (this, desired_tab); - int change_settings = settingsDialog->exec (); - if (change_settings == QDialog::Accepted) - { - settingsDialog->write_changed_settings (); - QSettings *settings = resource_manager::get_settings (); - if (settings) - emit settings_changed (settings); + if (_settings_dlg) // _settings_dlg is a guarded pointer! + { // here the dialog is still open and called once again + if (! desired_tab.isEmpty ()) + _settings_dlg->show_tab (desired_tab); + return; } - delete settingsDialog; + + _settings_dlg = new settings_dialog (this, desired_tab); + + connect (_settings_dlg, SIGNAL (apply_new_settings ()), + this, SLOT (request_reload_settings ())); + + _settings_dlg->setModal (false); + _settings_dlg->setAttribute (Qt::WA_DeleteOnClose); + _settings_dlg->show (); } +void +main_window::request_reload_settings () +{ + QSettings *settings = resource_manager::get_settings (); + + if (settings) + emit settings_changed (settings); +} void main_window::notice_settings (const QSettings *settings)