comparison libgui/src/m-editor/octave-qscintilla.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 38b954c0c0c1
children 431f80aba37a
comparison
equal deleted inserted replaced
31618:cd833a9baaa7 31619:ad014fc78bd6
52 #include <Qsci/qscilexerdiff.h> 52 #include <Qsci/qscilexerdiff.h>
53 #include <Qsci/qscilexerperl.h> 53 #include <Qsci/qscilexerperl.h>
54 54
55 #include "file-editor-tab.h" 55 #include "file-editor-tab.h"
56 #include "gui-preferences-ed.h" 56 #include "gui-preferences-ed.h"
57 #include "gui-settings.h"
57 // FIXME: hardwired marker numbers? 58 // FIXME: hardwired marker numbers?
58 #include "marker.h" 59 #include "marker.h"
59 #include "octave-qobject.h" 60 #include "octave-qobject.h"
60 #include "octave-qscintilla.h" 61 #include "octave-qscintilla.h"
61 #include "shortcut-manager.h" 62 #include "shortcut-manager.h"
428 case SCLEX_OCTAVE: 429 case SCLEX_OCTAVE:
429 #else 430 #else
430 case SCLEX_MATLAB: 431 case SCLEX_MATLAB:
431 #endif 432 #endif
432 { 433 {
433 resource_manager& rmgr = m_octave_qobj.get_resource_manager (); 434 gui_settings settings;
434 gui_settings *settings = rmgr.get_settings (); 435
435 int comment_string; 436 int comment_string;
436 437
437 if (comment) 438 if (comment)
438 { 439 {
439 // The commenting string is requested 440 // The commenting string is requested
440 if (settings->contains (ed_comment_str.key)) 441 if (settings.contains (ed_comment_str.key))
441 // new version (radio buttons) 442 // new version (radio buttons)
442 comment_string = settings->value (ed_comment_str).toInt (); 443 comment_string = settings.value (ed_comment_str).toInt ();
443 else 444 else
444 // old version (combo box) 445 // old version (combo box)
445 comment_string = settings->value (ed_comment_str_old.key, 446 comment_string = settings.value (ed_comment_str_old.key,
446 ed_comment_str.def).toInt (); 447 ed_comment_str.def).toInt ();
447 448
448 return (QStringList (ed_comment_strings.at (comment_string))); 449 return (QStringList (ed_comment_strings.at (comment_string)));
449 } 450 }
450 else 451 else
451 { 452 {
452 QStringList c_str; 453 QStringList c_str;
453 454
454 // The possible uncommenting string(s) are requested 455 // The possible uncommenting string(s) are requested
455 comment_string = settings->value (ed_uncomment_str).toInt (); 456 comment_string = settings.value (ed_uncomment_str).toInt ();
456 457
457 for (int i = 0; i < ed_comment_strings_count; i++) 458 for (int i = 0; i < ed_comment_strings_count; i++)
458 { 459 {
459 if (1 << i & comment_string) 460 if (1 << i & comment_string)
460 c_str.append (ed_comment_strings.at (i)); 461 c_str.append (ed_comment_strings.at (i));
906 907
907 Fhistory (interp, ovl (opt, path)); 908 Fhistory (interp, ovl (opt, path));
908 }); 909 });
909 910
910 // Disable opening a file at a breakpoint in case keyboard () is used 911 // Disable opening a file at a breakpoint in case keyboard () is used
911 gui_settings *settings = rmgr.get_settings (); 912 gui_settings settings;
912 bool show_dbg_file = settings->value (ed_show_dbg_file).toBool (); 913
913 settings->setValue (ed_show_dbg_file.key, false); 914 bool show_dbg_file = settings.value (ed_show_dbg_file).toBool ();
915 settings.setValue (ed_show_dbg_file.key, false);
914 916
915 // Let the interpreter execute the tmp file 917 // Let the interpreter execute the tmp file
916 emit interpreter_event 918 emit interpreter_event
917 ([=] (interpreter& interp) 919 ([=] (interpreter& interp)
918 { 920 {
1033 // TODO: Use line nr. (int argument) of possible error for removing 1035 // TODO: Use line nr. (int argument) of possible error for removing
1034 // lines from history that were never executed. For this, 1036 // lines from history that were never executed. For this,
1035 // possible lines from commands at a debug prompt must be 1037 // possible lines from commands at a debug prompt must be
1036 // taken into consideration. 1038 // taken into consideration.
1037 resource_manager& rmgr = m_octave_qobj.get_resource_manager (); 1039 resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
1038 gui_settings *settings = rmgr.get_settings (); 1040 gui_settings settings;
1039 settings->setValue (ed_show_dbg_file.key, show_dbg_file); 1041
1042 settings.setValue (ed_show_dbg_file.key, show_dbg_file);
1043
1040 rmgr.remove_tmp_file (tmp_file); 1044 rmgr.remove_tmp_file (tmp_file);
1041 rmgr.remove_tmp_file (tmp_hist); 1045 rmgr.remove_tmp_file (tmp_hist);
1042 1046
1043 emit interpreter_event 1047 emit interpreter_event
1044 ([=] (interpreter& interp) 1048 ([=] (interpreter& interp)