comparison libgui/src/qt-interpreter-events.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 9c0099048264
children 0645ea65ca6b
comparison
equal deleted inserted replaced
31618:cd833a9baaa7 31619:ad014fc78bd6
37 #include <QPushButton> 37 #include <QPushButton>
38 #include <QStringList> 38 #include <QStringList>
39 39
40 #include "dialog.h" 40 #include "dialog.h"
41 #include "gui-preferences-ed.h" 41 #include "gui-preferences-ed.h"
42 #include "gui-settings.h"
42 #include "octave-qobject.h" 43 #include "octave-qobject.h"
43 #include "qt-interpreter-events.h" 44 #include "qt-interpreter-events.h"
44 #include "qt-utils.h" 45 #include "qt-utils.h"
45 46
46 #include "localcharset-wrapper.h" 47 #include "localcharset-wrapper.h"
321 return m_result.toBool (); 322 return m_result.toBool ();
322 } 323 }
323 324
324 bool qt_interpreter_events::prompt_new_edit_file (const std::string& file) 325 bool qt_interpreter_events::prompt_new_edit_file (const std::string& file)
325 { 326 {
326 resource_manager& rmgr = m_octave_qobj.get_resource_manager (); 327 gui_settings settings;
327 gui_settings *settings = rmgr.get_settings (); 328
328 329 if (settings.value (ed_create_new_file).toBool ())
329 if (! settings || settings->value (ed_create_new_file).toBool ())
330 return true; 330 return true;
331 331
332 std::string abs_fname = sys::env::make_absolute (file); 332 std::string abs_fname = sys::env::make_absolute (file);
333 333
334 QStringList btn; 334 QStringList btn;
682 qt_interpreter_events::gui_preference_slot (const QString& key, 682 qt_interpreter_events::gui_preference_slot (const QString& key,
683 const QString& value) 683 const QString& value)
684 { 684 {
685 QMutexLocker autolock (&m_mutex); 685 QMutexLocker autolock (&m_mutex);
686 686
687 resource_manager& rmgr = m_octave_qobj.get_resource_manager (); 687 gui_settings settings;
688 gui_settings *settings = rmgr.get_settings (); 688
689 689 QString read_value = settings.value (key).toString ();
690 QString read_value = settings->value (key).toString ();
691 690
692 // Some preferences need extra handling 691 // Some preferences need extra handling
693 QString adjusted_value = gui_preference_adjust (key, value); 692 QString adjusted_value = gui_preference_adjust (key, value);
694 693
695 if (! adjusted_value.isEmpty () && (read_value != adjusted_value)) 694 if (! adjusted_value.isEmpty () && (read_value != adjusted_value))
696 { 695 {
697 // Change settings only for new, non-empty values 696 // Change settings only for new, non-empty values
698 settings->setValue (key, QVariant (adjusted_value)); 697 settings.setValue (key, QVariant (adjusted_value));
699 698
700 emit settings_changed (settings, true); // true: changed by worker 699 emit settings_changed (true); // true: changed by worker
701 } 700 }
702 701
703 m_result = read_value; 702 m_result = read_value;
704 703
705 wake_all (); 704 wake_all ();