Mercurial > octave
diff libgui/src/m-editor/file-editor.cc @ 31619:ad014fc78bd6
use individual local gui_settings objects
Previously, we created a single gui_settings object (derived from
QSettings) and accessed it from the resource_manager object. That
design is not necessary and is not the way QSettings was designed to
be used. Instead of managing a single object, we should be using
individual QSettings objects where needed. Each individual QSettings
object manages thread-safe access to a single global collection of
settings. The Qt docs say that operations on QSettings are not thread
safe, but that means that you can't create a QSettings object in one
thread and use it in another without some locking. I'm not sure
whether we were doing that correctly, but with this change it no
longer matters. Each QSettings object does perform locking when
reading or writing the underlying global data.
* resource-manager.h, resource-manager.cc
(resource_manager::m_settings): Delete data member.
(resource_manager::get_settings): Delete.
* annotation-dialog.cc, QTerminal.cc, QTerminal.h, command-widget.cc,
command-widget.h, community-news.cc, dialog.cc,
documentation-bookmarks.cc, documentation-bookmarks.h,
documentation-dock-widget.cc, documentation-dock-widget.h,
documentation.cc, documentation.h, dw-main-window.cc,
dw-main-window.h, external-editor-interface.cc, files-dock-widget.cc,
files-dock-widget.h, find-files-dialog.cc, history-dock-widget.cc,
history-dock-widget.h, file-editor-interface.h, file-editor-tab.cc,
file-editor-tab.h, file-editor.cc, file-editor.h, find-dialog.cc,
octave-qscintilla.cc, main-window.cc, main-window.h, news-reader.cc,
octave-dock-widget.cc, octave-dock-widget.h, qt-interpreter-events.cc,
qt-interpreter-events.h, release-notes.cc, resource-manager.cc,
resource-manager.h, set-path-dialog.cc, settings-dialog.cc,
settings-dialog.h, shortcut-manager.cc, shortcut-manager.h,
terminal-dock-widget.cc, terminal-dock-widget.h, variable-editor.cc,
variable-editor.h, welcome-wizard.cc, workspace-model.cc,
workspace-model.h, workspace-view.cc: Use local gui_settings objects
instead of accessing a pointer to a single gui_settings object owned
by the resource_manager object.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 02 Dec 2022 14:23:53 -0500 |
parents | c6c4c6f04170 |
children | 0645ea65ca6b |
line wrap: on
line diff
--- a/libgui/src/m-editor/file-editor.cc Fri Dec 02 15:51:44 2022 -0500 +++ b/libgui/src/m-editor/file-editor.cc Fri Dec 02 14:23:53 2022 -0500 @@ -50,6 +50,7 @@ #include "gui-preferences-ed.h" #include "gui-preferences-sc.h" #include "gui-preferences-global.h" +#include "gui-settings.h" #include "main-window.h" #include "octave-qobject.h" #include "octave-qtutils.h" @@ -181,10 +182,10 @@ void file_editor::handle_enter_debug_mode (void) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - gui_settings *settings = rmgr.get_settings (); - QString sc_run = settings->sc_value (sc_edit_run_run_file); - QString sc_cont = settings->sc_value (sc_main_debug_continue); + gui_settings settings; + + QString sc_run = settings.sc_value (sc_edit_run_run_file); + QString sc_cont = settings.sc_value (sc_main_debug_continue); if (sc_run == sc_cont) m_run_action->setShortcut (QKeySequence ()); // prevent ambiguous shortcuts @@ -265,10 +266,10 @@ return; // not yet ready but got visibility changed signals } - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - gui_settings *settings = rmgr.get_settings (); - if (settings->value (global_use_custom_editor.key, - global_use_custom_editor.def).toBool ()) + gui_settings settings; + + if (settings.value (global_use_custom_editor.key, + global_use_custom_editor.def).toBool ()) return; // do not open an empty script in the external editor bool real_visible; @@ -318,27 +319,29 @@ request_new_file (""); } - void file_editor::restore_session (gui_settings *settings) + void file_editor::restore_session (void) { + gui_settings settings; + //restore previous session - if (! settings->value (ed_restore_session).toBool ()) + if (! settings.value (ed_restore_session).toBool ()) return; // get the data from the settings file QStringList sessionFileNames - = settings->value (ed_session_names).toStringList (); + = settings.value (ed_session_names).toStringList (); QStringList session_encodings - = settings->value (ed_session_enc).toStringList (); + = settings.value (ed_session_enc).toStringList (); QStringList session_index - = settings->value (ed_session_ind).toStringList (); + = settings.value (ed_session_ind).toStringList (); QStringList session_lines - = settings->value (ed_session_lines).toStringList (); + = settings.value (ed_session_lines).toStringList (); QStringList session_bookmarks - = settings->value (ed_session_bookmarks).toStringList (); + = settings.value (ed_session_bookmarks).toStringList (); // fill a list of the struct and sort it (depending on index) QList<session_data> s_data; @@ -440,8 +443,7 @@ // together with encoding and the tab index void file_editor::save_session (void) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - gui_settings *settings = rmgr.get_settings (); + gui_settings settings; QStringList fetFileNames; QStringList fet_encodings; @@ -473,12 +475,13 @@ } } - settings->setValue (ed_session_names.key, fetFileNames); - settings->setValue (ed_session_enc.key, fet_encodings); - settings->setValue (ed_session_ind.key, fet_index); - settings->setValue (ed_session_lines.key, fet_lines); - settings->setValue (ed_session_bookmarks.key, fet_bookmarks); - settings->sync (); + settings.setValue (ed_session_names.key, fetFileNames); + settings.setValue (ed_session_enc.key, fet_encodings); + settings.setValue (ed_session_ind.key, fet_index); + settings.setValue (ed_session_lines.key, fet_lines); + settings.setValue (ed_session_bookmarks.key, fet_bookmarks); + + settings.sync (); } bool file_editor::check_closing (void) @@ -1273,9 +1276,11 @@ m_tmp_closed_files.clear (); } - void file_editor::notice_settings (const gui_settings *settings) + void file_editor::notice_settings (void) { - int size_idx = settings->value (global_icon_size).toInt (); + gui_settings settings; + + int size_idx = settings.value (global_icon_size).toInt (); size_idx = (size_idx > 0) - (size_idx < 0) + 1; // Make valid index from 0 to 2 QStyle *st = style (); @@ -1284,8 +1289,8 @@ // Tab position and rotation QTabWidget::TabPosition pos - = static_cast<QTabWidget::TabPosition> (settings->value (ed_tab_position).toInt ()); - bool rotated = settings->value (ed_tabs_rotated).toBool (); + = static_cast<QTabWidget::TabPosition> (settings.value (ed_tab_position).toInt ()); + bool rotated = settings.value (ed_tabs_rotated).toBool (); m_tab_widget->setTabPosition (pos); @@ -1308,7 +1313,7 @@ height = is; // Calculate possibly limited width and set the elide mode - int chars = settings->value (ed_tabs_max_width).toInt (); + int chars = settings.value (ed_tabs_max_width).toInt (); int width = 9999; if (chars > 0) width = chars * QFontMetrics (m_tab_widget->font ()).averageCharWidth (); @@ -1349,23 +1354,23 @@ m_tab_widget->setStyleSheet (style_sheet); bool show_it; - show_it = settings->value (ed_show_line_numbers).toBool (); + show_it = settings.value (ed_show_line_numbers).toBool (); m_show_linenum_action->setChecked (show_it); - show_it = settings->value (ed_show_white_space).toBool (); + show_it = settings.value (ed_show_white_space).toBool (); m_show_whitespace_action->setChecked (show_it); - show_it = settings->value (ed_show_eol_chars).toBool (); + show_it = settings.value (ed_show_eol_chars).toBool (); m_show_eol_action->setChecked (show_it); - show_it = settings->value (ed_show_indent_guides).toBool (); + show_it = settings.value (ed_show_indent_guides).toBool (); m_show_indguide_action->setChecked (show_it); - show_it = settings->value (ed_long_line_marker).toBool (); + show_it = settings.value (ed_long_line_marker).toBool (); m_show_longline_action->setChecked (show_it); - show_it = settings->value (ed_show_toolbar).toBool (); + show_it = settings.value (ed_show_toolbar).toBool (); m_show_toolbar_action->setChecked (show_it); m_tool_bar->setVisible (show_it); - show_it = settings->value (ed_show_edit_status_bar).toBool (); + show_it = settings.value (ed_show_edit_status_bar).toBool (); m_show_statusbar_action->setChecked (show_it); - show_it = settings->value (ed_show_hscroll_bar).toBool (); + show_it = settings.value (ed_show_hscroll_bar).toBool (); m_show_hscrollbar_action->setChecked (show_it); set_shortcuts (); @@ -1375,7 +1380,7 @@ m_find_dialog->setWindowIcon (windowIcon ()); // Relay signal to file editor tabs. - emit fetab_settings_changed (settings); + emit fetab_settings_changed (); } void file_editor::set_shortcuts (void) @@ -1483,9 +1488,8 @@ if (m_closed && visible) { m_closed = false; - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - gui_settings *settings = rmgr.get_settings (); - restore_session (settings); + + restore_session (); } empty_script (false, visible); @@ -1549,10 +1553,9 @@ const QString& cond, int index, const QString& bookmarks) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - gui_settings *settings = rmgr.get_settings (); - - if (settings->value (global_use_custom_editor).toBool ()) + gui_settings settings; + + if (settings.value (global_use_custom_editor).toBool ()) { // Custom editor if (debug_pointer || breakpoint_marker) @@ -1562,8 +1565,7 @@ return; // Custom editor called } - bool show_dbg_file - = settings->value (ed_show_dbg_file).toBool (); + bool show_dbg_file = settings.value (ed_show_dbg_file).toBool (); if (openFileName.isEmpty ()) { @@ -1677,7 +1679,7 @@ bool create_file = true; QMessageBox *msgBox; - if (! settings->value (ed_create_new_file).toBool ()) + if (! settings.value (ed_create_new_file).toBool ()) { msgBox = new QMessageBox (QMessageBox::Question, tr ("Octave Editor"), @@ -1849,9 +1851,9 @@ // handler for the close event void file_editor::closeEvent (QCloseEvent *e) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - gui_settings *settings = rmgr.get_settings (); - if (settings->value (ed_hiding_closes_files).toBool ()) + gui_settings settings; + + if (settings.value (ed_hiding_closes_files).toBool ()) { if (check_closing ()) { @@ -1931,12 +1933,11 @@ m_tab_widget = new file_editor_tab_widget (editor_widget, this); - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - // the mru-list and an empty array of actions - gui_settings *settings = rmgr.get_settings (); - m_mru_files = settings->value (ed_mru_file_list).toStringList (); - m_mru_files_encodings = settings->value (ed_mru_file_encodings) + gui_settings settings; + + m_mru_files = settings.value (ed_mru_file_list).toStringList (); + m_mru_files_encodings = settings.value (ed_mru_file_encodings) .toStringList (); if (m_mru_files_encodings.count () != m_mru_files.count ()) @@ -1974,6 +1975,8 @@ m_fileMenu->addSeparator (); + resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + m_save_action = add_action (m_fileMenu, rmgr.icon ("document-save"), tr ("&Save File"), SLOT (request_save_file (bool))); @@ -2493,7 +2496,7 @@ // Signals from the file_editor or main-win non-trivial operations connect (this, &file_editor::fetab_settings_changed, - f, [=] (const gui_settings *settings) { f->notice_settings (settings); }); + f, [=] () { f->notice_settings (); }); connect (this, &file_editor::fetab_change_request, f, &file_editor_tab::change_editor_state); @@ -2677,21 +2680,22 @@ } // save actual mru-list in settings - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - gui_settings *settings = rmgr.get_settings (); - - settings->setValue (ed_mru_file_list.key, m_mru_files); - settings->setValue (ed_mru_file_encodings.key, m_mru_files_encodings); - settings->sync (); + + gui_settings settings; + + settings.setValue (ed_mru_file_list.key, m_mru_files); + settings.setValue (ed_mru_file_encodings.key, m_mru_files_encodings); + + settings.sync (); } bool file_editor::call_custom_editor (const QString& file_name, int line) { // Check if the user wants to use a custom file editor. - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - gui_settings *settings = rmgr.get_settings (); - - if (settings->value (global_use_custom_editor.key, + + gui_settings settings; + + if (settings.value (global_use_custom_editor.key, global_use_custom_editor.def).toBool ()) { // use the external editor interface for handling the call @@ -2709,12 +2713,11 @@ void file_editor::toggle_preference (const gui_pref& preference) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - gui_settings *settings = rmgr.get_settings (); - - bool old = settings->value (preference).toBool (); - settings->setValue (preference.key, ! old); - notice_settings (settings); + gui_settings settings; + + bool old = settings.value (preference).toBool (); + settings.setValue (preference.key, ! old); + notice_settings (); } // Function for closing the files in a removed directory