Mercurial > octave
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 (); |