changeset 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 cd833a9baaa7
children 6dfaaf8ecf3b
files libgui/graphics/annotation-dialog.cc libgui/qterminal/libqterminal/QTerminal.cc libgui/qterminal/libqterminal/QTerminal.h libgui/src/command-widget.cc libgui/src/command-widget.h libgui/src/community-news.cc libgui/src/dialog.cc libgui/src/documentation-bookmarks.cc libgui/src/documentation-bookmarks.h libgui/src/documentation-dock-widget.cc libgui/src/documentation-dock-widget.h libgui/src/documentation.cc libgui/src/documentation.h libgui/src/dw-main-window.cc libgui/src/dw-main-window.h libgui/src/external-editor-interface.cc libgui/src/files-dock-widget.cc libgui/src/files-dock-widget.h libgui/src/find-files-dialog.cc libgui/src/history-dock-widget.cc libgui/src/history-dock-widget.h libgui/src/m-editor/file-editor-interface.h libgui/src/m-editor/file-editor-tab.cc libgui/src/m-editor/file-editor-tab.h libgui/src/m-editor/file-editor.cc libgui/src/m-editor/file-editor.h libgui/src/m-editor/find-dialog.cc libgui/src/m-editor/octave-qscintilla.cc libgui/src/main-window.cc libgui/src/main-window.h libgui/src/news-reader.cc libgui/src/octave-dock-widget.cc libgui/src/octave-dock-widget.h libgui/src/qt-interpreter-events.cc libgui/src/qt-interpreter-events.h libgui/src/release-notes.cc libgui/src/resource-manager.cc libgui/src/resource-manager.h libgui/src/set-path-dialog.cc libgui/src/settings-dialog.cc libgui/src/settings-dialog.h libgui/src/shortcut-manager.cc libgui/src/shortcut-manager.h libgui/src/terminal-dock-widget.cc libgui/src/terminal-dock-widget.h libgui/src/variable-editor.cc libgui/src/variable-editor.h libgui/src/welcome-wizard.cc libgui/src/workspace-model.cc libgui/src/workspace-model.h libgui/src/workspace-view.cc libgui/src/workspace-view.h
diffstat 52 files changed, 1050 insertions(+), 1139 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/graphics/annotation-dialog.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/graphics/annotation-dialog.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -33,6 +33,7 @@
 
 #include "gui-settings.h"
 #include "gui-preferences-gp.h"
+#include "gui-settings.h"
 #include "octave-qobject.h"
 
 #include "QtHandlesUtils.h"
@@ -55,13 +56,11 @@
 {
   ui->setupUi (this);
 
-  octave::resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-
-  octave::gui_settings *settings = rmgr.get_settings ();
+  octave::gui_settings settings;
 
   // restore last geometry
-  if (settings && settings->contains (gp_annotation_geometry.key))
-    restoreGeometry (settings->value (gp_annotation_geometry).toByteArray ());
+  if (settings.contains (gp_annotation_geometry.key))
+    restoreGeometry (settings.value (gp_annotation_geometry).toByteArray ());
 
   // connect signals
   connect (ui->button_box, &QDialogButtonBox::clicked,
@@ -101,13 +100,10 @@
   QDialogButtonBox::ButtonRole button_role
     = ui->button_box->buttonRole (button);
 
-  octave::resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-
-  octave::gui_settings *settings = rmgr.get_settings ();
+  octave::gui_settings settings;
 
   // save position
-  if (settings)
-    settings->setValue (gp_annotation_geometry.key, saveGeometry ());
+  settings.setValue (gp_annotation_geometry.key, saveGeometry ());
 
   if (button_role == QDialogButtonBox::ApplyRole
       || button_role == QDialogButtonBox::AcceptRole)
--- a/libgui/qterminal/libqterminal/QTerminal.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/qterminal/libqterminal/QTerminal.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -38,6 +38,7 @@
 #include "gui-preferences-global.h"
 #include "gui-preferences-cs.h"
 #include "gui-preferences-sc.h"
+#include "gui-settings.h"
 #include "octave-qobject.h"
 #include "resource-manager.h"
 
@@ -199,32 +200,31 @@
 }
 
 void
-QTerminal::notice_settings (const gui_settings *settings)
+QTerminal::notice_settings (void)
 {
-  if (! settings)
-    return;
+  octave::gui_settings settings;
 
   // Set terminal font:
   QFont term_font = QFont ();
   term_font.setStyleHint (QFont::TypeWriter);
-  QString default_font = settings->value (global_mono_font).toString ();
+  QString default_font = settings.value (global_mono_font).toString ();
   term_font.setFamily
-    (settings->value (cs_font.key, default_font).toString ());
+    (settings.value (cs_font.key, default_font).toString ());
   term_font.setPointSize
-    (settings->value (cs_font_size).toInt ());
+    (settings.value (cs_font_size).toInt ());
   setTerminalFont (term_font);
 
   QFontMetrics metrics (term_font);
   setMinimumSize (metrics.maxWidth ()*16, metrics.height ()*3);
 
   QString cursor_type
-    = settings->value (cs_cursor).toString ();
+    = settings.value (cs_cursor).toString ();
 
   bool cursor_blinking;
-  if (settings->contains (global_cursor_blinking.key))
-    cursor_blinking = settings->value (global_cursor_blinking).toBool ();
+  if (settings.contains (global_cursor_blinking.key))
+    cursor_blinking = settings.value (global_cursor_blinking).toBool ();
   else
-    cursor_blinking = settings->value (cs_cursor_blinking).toBool ();
+    cursor_blinking = settings.value (cs_cursor_blinking).toBool ();
 
   for (int ct = IBeamCursor; ct <= UnderlineCursor; ct++)
     {
@@ -236,40 +236,40 @@
     }
 
   bool cursorUseForegroundColor
-    = settings->value (cs_cursor_use_fgcol).toBool ();
+    = settings.value (cs_cursor_use_fgcol).toBool ();
 
-  int mode = settings->value (cs_color_mode).toInt ();
+  int mode = settings.value (cs_color_mode).toInt ();
 
-  setForegroundColor (settings->color_value (cs_colors[0], mode));
+  setForegroundColor (settings.color_value (cs_colors[0], mode));
 
-  setBackgroundColor (settings->color_value (cs_colors[1], mode));
+  setBackgroundColor (settings.color_value (cs_colors[1], mode));
 
-  setSelectionColor (settings->color_value (cs_colors[2], mode));
+  setSelectionColor (settings.color_value (cs_colors[2], mode));
 
   setCursorColor (cursorUseForegroundColor,
-                  settings->color_value (cs_colors[3], mode));
+                  settings.color_value (cs_colors[3], mode));
 
-  setScrollBufferSize (settings->value (cs_hist_buffer).toInt ());
+  setScrollBufferSize (settings.value (cs_hist_buffer).toInt ());
 
   // If the Copy shortcut is Ctrl+C, then the Copy action also emits
   // a signal for interrupting the current code executed by the worker.
   // If the Copy shortcut is not Ctrl+C, an extra interrupt action is
   // set up for emitting the interrupt signal.
 
-  QString sc = settings->sc_value (sc_main_edit_copy);
+  QString sc = settings.sc_value (sc_main_edit_copy);
 
   //  Dis- or enable extra interrupt action: We need an extra option when
   //  copy shortcut is not Ctrl-C or when global shortcuts (like copy) are
   //  disabled.
   bool extra_ir_action
       = (sc != QKeySequence (Qt::ControlModifier | Qt::Key_C).toString ())
-        || settings->value (sc_prevent_rl_conflicts).toBool ();
+        || settings.value (sc_prevent_rl_conflicts).toBool ();
 
   _interrupt_action->setEnabled (extra_ir_action);
   has_extra_interrupt (extra_ir_action);
 
   // check whether shortcut Ctrl-D is in use by the main-window
-  bool ctrld = settings->value (sc_main_ctrld).toBool ();
+  bool ctrld = settings.value (sc_main_ctrld).toBool ();
   _nop_action->setEnabled (! ctrld);
 }
 
--- a/libgui/qterminal/libqterminal/QTerminal.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/qterminal/libqterminal/QTerminal.h	Fri Dec 02 14:23:53 2022 -0500
@@ -30,13 +30,6 @@
 #include <QString>
 #include <QWidget>
 
-// For now, we need to use the following #include and using statement
-// for the signal/slot macros.  Could maybe change later when using
-// Qt5-style signal/slot connections.
-#include "gui-settings.h"
-
-using octave::gui_settings;
-
 namespace octave
 {
   class base_qobject;
@@ -126,7 +119,7 @@
 
   virtual void handleCustomContextMenuRequested (const QPoint& at);
 
-  void notice_settings (const gui_settings *settings);
+  void notice_settings (void);
 
   virtual void init_terminal_size (void) { }
 
--- a/libgui/src/command-widget.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/command-widget.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -44,6 +44,7 @@
 #include "event-manager.h"
 #include "gui-preferences-cs.h"
 #include "gui-preferences-global.h"
+#include "gui-settings.h"
 #include "gui-utils.h"
 #include "input.h"
 #include "interpreter.h"
@@ -144,23 +145,25 @@
 
   }
 
-  void command_widget::notice_settings (const gui_settings *settings)
+  void command_widget::notice_settings (void)
   {
+    gui_settings settings;
+
     // Set terminal font:
     QFont term_font = QFont ();
     term_font.setStyleHint (QFont::TypeWriter);
-    QString default_font = settings->value (global_mono_font).toString ();
+    QString default_font = settings.value (global_mono_font).toString ();
     term_font.setFamily
-      (settings->value (cs_font.key, default_font).toString ());
+      (settings.value (cs_font.key, default_font).toString ());
     term_font.setPointSize
-      (settings->value (cs_font_size).toInt ());
+      (settings.value (cs_font_size).toInt ());
 
     m_console->setFont (term_font);
 
     // Colors
-    int mode = settings->value (cs_color_mode).toInt ();
-    QColor fgc = settings->color_value (cs_colors[0], mode);
-    QColor bgc = settings->color_value (cs_colors[1], mode);
+    int mode = settings.value (cs_color_mode).toInt ();
+    QColor fgc = settings.color_value (cs_colors[0], mode);
+    QColor bgc = settings.color_value (cs_colors[1], mode);
 
     m_console->setStyleSheet (QString ("color: %1; background-color:%2;")
                                      .arg (fgc.name ()).arg (bgc.name ()));
--- a/libgui/src/command-widget.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/command-widget.h	Fri Dec 02 14:23:53 2022 -0500
@@ -31,7 +31,6 @@
 #include <Qsci/qsciscintilla.h>
 
 #include "octave-qobject.h"
-#include "gui-settings.h"
 
 class QsciScintilla;
 
@@ -113,7 +112,7 @@
 
     void insert_interpreter_output (const QString& msg);
 
-    void notice_settings (const gui_settings *settings);
+    void notice_settings (void);
 
   private:
 
--- a/libgui/src/community-news.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/community-news.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -35,6 +35,7 @@
 #include "gui-utils.h"
 #include "gui-preferences-dw.h"
 #include "gui-preferences-nr.h"
+#include "gui-settings.h"
 #include "news-reader.h"
 #include "octave-qobject.h"
 
@@ -76,11 +77,10 @@
     resize (win_x/2, win_y/2);
     move ((win_x - width ())/2, (win_y - height ())/2);
 
-    resource_manager& rmgr = oct_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     QString icon;
-    QString icon_set = settings->value (dw_icon_set).toString ();
+    QString icon_set = settings.value (dw_icon_set).toString ();
     if (icon_set != "NONE")
       // No extra icon for Community news, take the one of the release notes
       icon = dw_icon_set_names[icon_set] + "ReleaseWidget.png";
@@ -92,10 +92,7 @@
     // FIXME: This is a news reader preference, so shouldn't it be used
     // in the news_reader object?
 
-    bool connect_to_web
-      = (settings
-         ? settings->value (nr_allow_connection).toBool ()
-         : true);
+    bool connect_to_web = settings.value (nr_allow_connection).toBool ();
 
     QThread *worker_thread = new QThread;
 
--- a/libgui/src/dialog.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/dialog.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -42,8 +42,9 @@
 #include <QVBoxLayout>
 
 #include "dialog.h"
+#include "gui-preferences-global.h"
+#include "gui-settings.h"
 #include "octave-qobject.h"
-#include "gui-preferences-global.h"
 
 namespace octave
 {
@@ -631,9 +632,10 @@
     setDirectory (dirname);
 
     // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
-    resource_manager& rmgr = oct_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    if (! settings->value (global_use_native_dialogs).toBool ())
+
+    gui_settings settings;
+
+    if (! settings.value (global_use_native_dialogs).toBool ())
       setOption(QFileDialog::DontUseNativeDialog);
 
     if (multimode == "on")         // uigetfile multiselect=on
--- a/libgui/src/documentation-bookmarks.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/documentation-bookmarks.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -36,10 +36,10 @@
 #include "documentation.h"
 #include "documentation-bookmarks.h"
 
-#include "gui-settings.h"
 #include "gui-preferences-global.h"
 #include "gui-preferences-dc.h"
 #include "gui-preferences-sc.h"
+#include "gui-settings.h"
 #include "octave-qtutils.h"
 #include "shortcut-manager.h"
 
@@ -58,8 +58,7 @@
   {
     setObjectName ("documentation_tab_bookmarks");
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     // Setup the tree view with the bookmarks
     m_tree = new QTreeWidget (p);
@@ -89,7 +88,7 @@
     icon_bookmark.addPixmap (style ()->standardPixmap(QStyle::SP_FileIcon));
 
     // Setup and read the bookmarkfile
-    QFileInfo f (settings->fileName ());
+    QFileInfo f (settings.fileName ());
     QString f_path = f.absolutePath ();
     f.setFile (QDir (f_path), dc_bookmark_file);
     m_xbel_file.setFileName (f.absoluteFilePath ());
@@ -121,7 +120,7 @@
     m_filter->setSizePolicy (size_pol);
     m_filter->completer ()->setCaseSensitivity (Qt::CaseSensitive);
 
-    m_filter->addItems (settings->value (dc_bookmark_filter_mru).toStringList ());
+    m_filter->addItems (settings.value (dc_bookmark_filter_mru).toStringList ());
 
     connect (m_filter, &QComboBox::editTextChanged,
              this, &documentation_bookmarks::filter_bookmarks);
@@ -129,7 +128,7 @@
              this, &documentation_bookmarks::update_filter_history);
 
     m_filter_checkbox = new QCheckBox (m_filter_widget);
-    bool filter_state = settings->value (dc_bookmark_filter_active).toBool ();
+    bool filter_state = settings.value (dc_bookmark_filter_active).toBool ();
     m_filter_checkbox->setChecked (filter_state);
     filter_activate (filter_state);
 
@@ -144,7 +143,7 @@
     h_box_bm->setMargin (2);
     m_filter_widget->setLayout (h_box_bm);
 
-    m_filter_shown = settings->value (dc_bookmark_filter_shown).toBool ();
+    m_filter_shown = settings.value (dc_bookmark_filter_shown).toBool ();
     m_filter_widget->setVisible (m_filter_shown);
 
     // Resulting Layout of this widget
@@ -380,21 +379,23 @@
     m_filter_widget->setVisible (m_filter_shown);
   }
 
-  void documentation_bookmarks::save_settings (gui_settings *settings)
+  void documentation_bookmarks::save_settings (void)
   {
     // Write the bookmarks to the xbel-file
     write_bookmarks ();
 
     // Store settings
-    settings->setValue (dc_bookmark_filter_active.key, m_filter_checkbox->isChecked ());
-    settings->setValue (dc_bookmark_filter_shown.key, m_filter_shown);
+    gui_settings settings;
+
+    settings.setValue (dc_bookmark_filter_active.key, m_filter_checkbox->isChecked ());
+    settings.setValue (dc_bookmark_filter_shown.key, m_filter_shown);
 
     QStringList mru;
     for (int i = 0; i < m_filter->count (); i++)
       mru.append (m_filter->itemText (i));
-    settings->setValue (dc_bookmark_filter_mru.key, mru);
+    settings.setValue (dc_bookmark_filter_mru.key, mru);
 
-    settings->sync ();
+    settings.sync ();
   }
 
   void documentation_bookmarks::write_bookmarks (void)
--- a/libgui/src/documentation-bookmarks.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/documentation-bookmarks.h	Fri Dec 02 14:23:53 2022 -0500
@@ -56,7 +56,7 @@
 
     void add_bookmark (void);
     void add_folder (bool);
-    void save_settings (gui_settings *settings);
+    void save_settings (void);
 
   private slots:
 
--- a/libgui/src/documentation-dock-widget.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/documentation-dock-widget.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -47,9 +47,9 @@
       make_window ();
   }
 
-  void documentation_dock_widget::notice_settings (const gui_settings *settings)
+  void documentation_dock_widget::notice_settings (void)
   {
-    m_docs->notice_settings (settings);
+    m_docs->notice_settings ();
   }
 
   void documentation_dock_widget::save_settings (void)
--- a/libgui/src/documentation-dock-widget.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/documentation-dock-widget.h	Fri Dec 02 14:23:53 2022 -0500
@@ -45,7 +45,7 @@
 
   public slots:
 
-    void notice_settings (const gui_settings *settings);
+    void notice_settings (void);
     void save_settings (void);
 
     void copyClipboard (void);
--- a/libgui/src/documentation.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/documentation.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -56,6 +56,7 @@
 #include "gui-preferences-global.h"
 #include "gui-preferences-dc.h"
 #include "gui-preferences-sc.h"
+#include "gui-settings.h"
 #include "octave-qobject.h"
 #include "shortcut-manager.h"
 
@@ -180,7 +181,7 @@
     v_box_browser_find->addWidget (find_footer);
     browser_find->setLayout (v_box_browser_find);
 
-    notice_settings (rmgr.get_settings ());
+    notice_settings ();
 
     m_findnext_shortcut->setContext (Qt::WidgetWithChildrenShortcut);
     connect (m_findnext_shortcut, &QShortcut::activated,
@@ -603,15 +604,17 @@
     m_doc_browser->moveCursor (QTextCursor::Start);
   }
 
-  void documentation::notice_settings (const gui_settings *settings)
+  void documentation::notice_settings (void)
   {
+    gui_settings settings;
+
     // If m_help_engine is not defined, the objects accessed by this method
     // are not valid.  Thus, just return in this case.
     if (! m_help_engine)
       return;
 
     // Icon size in the toolbar.
-    int size_idx = settings->value (global_icon_size).toInt ();
+    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 ();
@@ -633,16 +636,15 @@
     scmgr.set_shortcut (m_action_bookmark, sc_doc_bookmark);
 
     // Settings for the browser
-    m_doc_browser->notice_settings (settings);
+    m_doc_browser->notice_settings ();
   }
 
   void documentation::save_settings (void)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
-    m_doc_browser->save_settings (settings);
-    m_bookmarks->save_settings (settings);
+    m_doc_browser->save_settings ();
+    m_bookmarks->save_settings ();
   }
 
   void documentation::copyClipboard (void)
@@ -1039,12 +1041,14 @@
       QDesktopServices::openUrl (url);
   }
 
-  void documentation_browser::notice_settings (const gui_settings *settings)
+  void documentation_browser::notice_settings (void)
   {
+    gui_settings settings;
+
     // Zoom level only at startup, not when other settings have changed
     if (m_zoom_level > max_zoom_level)
       {
-        m_zoom_level = settings->value (dc_browser_zoom_level).toInt ();
+        m_zoom_level = settings.value (dc_browser_zoom_level).toInt ();
         zoomIn (m_zoom_level);
       }
   }
@@ -1057,11 +1061,13 @@
       return QTextBrowser::loadResource(type, url);
   }
 
-  void documentation_browser::save_settings (gui_settings *settings)
+  void documentation_browser::save_settings (void)
   {
-    settings->setValue (dc_browser_zoom_level.key, m_zoom_level);
+    gui_settings settings;
 
-    settings->sync ();
+    settings.setValue (dc_browser_zoom_level.key, m_zoom_level);
+
+    settings.sync ();
   }
 
   void documentation_browser::zoom_in (void)
--- a/libgui/src/documentation.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/documentation.h	Fri Dec 02 14:23:53 2022 -0500
@@ -37,8 +37,6 @@
 #include <QWidget>
 #include <QtHelp/QHelpEngine>
 
-#include "gui-settings.h"
-
 namespace octave
 {
   class base_qobject;
@@ -62,8 +60,8 @@
 
     void handle_index_clicked (const QUrl& url,
                                const QString& keyword = QString ());
-    void notice_settings (const gui_settings *settings);
-    void save_settings (gui_settings *settings);
+    void notice_settings (void);
+    void save_settings (void);
 
     //! Zooming in and out while taking care of the zoom level
     //!@{
@@ -122,7 +120,7 @@
 
   public slots:
 
-    void notice_settings (const gui_settings *settings);
+    void notice_settings (void);
     void save_settings (void);
 
     void copyClipboard (void);
--- a/libgui/src/dw-main-window.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/dw-main-window.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -36,9 +36,9 @@
 #include <QMenu>
 
 #include "dw-main-window.h"
+#include "gui-preferences-sc.h"
 #include "octave-qobject.h"
 #include "shortcut-manager.h"
-#include "gui-preferences-sc.h"
 
 namespace octave
 {
@@ -76,7 +76,7 @@
     m_actions_list << m_switch_left_action;
     m_actions_list << m_switch_right_action;
 
-    notice_settings (rmgr.get_settings ());
+    notice_settings ();
   }
 
 
@@ -130,7 +130,7 @@
   }
 
   // Update the settings
-  void dw_main_window::notice_settings (const gui_settings *)
+  void dw_main_window::notice_settings (void)
   {
     shortcut_manager& scmgr = m_octave_qobj.get_shortcut_manager ();
 
--- a/libgui/src/dw-main-window.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/dw-main-window.h	Fri Dec 02 14:23:53 2022 -0500
@@ -28,8 +28,6 @@
 
 #include <QMainWindow>
 
-#include "gui-settings.h"
-
 namespace octave
 {
   class base_qobject;
@@ -52,7 +50,7 @@
 
   public slots:
 
-    void notice_settings (const gui_settings *);
+    void notice_settings (void);
 
   protected slots:
 
--- a/libgui/src/external-editor-interface.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/external-editor-interface.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -103,10 +103,10 @@
   // Get and verify the settings of the external editor program
   QString external_editor_interface::external_editor (void)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    QString editor = settings->value (global_custom_editor.key,
-                                      global_custom_editor.def).toString ();
+    gui_settings settings;
+
+    QString editor = settings.value (global_custom_editor.key,
+                                     global_custom_editor.def).toString ();
 
     // check the settings (avoid an empty string)
     if (editor.trimmed ().isEmpty ())
--- a/libgui/src/files-dock-widget.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/files-dock-widget.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -49,6 +49,7 @@
 #include "files-dock-widget.h"
 #include "gui-preferences-fb.h"
 #include "gui-preferences-global.h"
+#include "gui-settings.h"
 #include "octave-qobject.h"
 #include "octave-qtutils.h"
 #include "qt-interpreter-events.h"
@@ -285,24 +286,23 @@
     connect (m_sync_browser_directory_action, &QAction::triggered,
              this, &files_dock_widget::do_sync_browser_directory);
 
-    gui_settings *settings = rmgr.get_settings ();
-    // FIXME: what should happen if settings is 0?
+    gui_settings settings;
 
     // Create the QFileSystemModel starting in the desired directory
     QDir startup_dir;  // take current dir
 
-    if (settings->value (fb_restore_last_dir).toBool ())
+    if (settings.value (fb_restore_last_dir).toBool ())
       {
         // restore last dir from previous session
         QStringList last_dirs
-          = settings->value (fb_mru_list.key).toStringList ();
+          = settings.value (fb_mru_list.key).toStringList ();
         if (last_dirs.length () > 0)
           startup_dir = QDir (last_dirs.at (0));  // last dir in previous session
       }
-    else if (! settings->value (fb_startup_dir).toString ().isEmpty ())
+    else if (! settings.value (fb_startup_dir).toString ().isEmpty ())
       {
         // do not restore but there is a startup dir configured
-        startup_dir = QDir (settings->value (fb_startup_dir.key).toString ());
+        startup_dir = QDir (settings.value (fb_startup_dir.key).toString ());
       }
 
     if (! startup_dir.exists ())
@@ -349,14 +349,14 @@
     // get sort column and order as well as column state (order and width)
 
     m_file_tree_view->sortByColumn
-      (settings->value (fb_sort_column).toInt (),
-       static_cast<Qt::SortOrder> (settings->value (fb_sort_order).toUInt ()));
+      (settings.value (fb_sort_column).toInt (),
+       static_cast<Qt::SortOrder> (settings.value (fb_sort_order).toUInt ()));
        // FIXME: use value<Qt::SortOrder> instead of static cast after
        //        dropping support of Qt 5.4
 
-    if (settings->contains (fb_column_state.key))
+    if (settings.contains (fb_column_state.key))
       m_file_tree_view->header ()->restoreState
-        (settings->value (fb_column_state.key).toByteArray ());
+        (settings.value (fb_column_state.key).toByteArray ());
 
     // Set header properties for sorting
     m_file_tree_view->header ()->setSectionsClickable (true);
@@ -364,7 +364,7 @@
     m_file_tree_view->header ()->setSortIndicatorShown (true);
 
     QStringList mru_dirs =
-      settings->value (fb_mru_list.key).toStringList ();
+      settings.value (fb_mru_list.key).toStringList ();
     m_current_directory->addItems (mru_dirs);
 
     m_current_directory->setEditText
@@ -430,27 +430,23 @@
 
   void files_dock_widget::save_settings (void)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-
-    if (! settings)
-      return;
+    gui_settings settings;
 
     int sort_column = m_file_tree_view->header ()->sortIndicatorSection ();
     Qt::SortOrder sort_order = m_file_tree_view->header ()->sortIndicatorOrder ();
-    settings->setValue (fb_sort_column.key, sort_column);
-    settings->setValue (fb_sort_order.key, sort_order);
-    settings->setValue (fb_column_state.key,
-                        m_file_tree_view->header ()->saveState ());
+    settings.setValue (fb_sort_column.key, sort_column);
+    settings.setValue (fb_sort_order.key, sort_order);
+    settings.setValue (fb_column_state.key,
+                       m_file_tree_view->header ()->saveState ());
 
     QStringList dirs;
     for (int i=0; i< m_current_directory->count (); i++)
       {
         dirs.append (m_current_directory->itemText (i));
       }
-    settings->setValue (fb_mru_list.key, dirs);
+    settings.setValue (fb_mru_list.key, dirs);
 
-    settings->sync ();
+    settings.sync ();
 
     octave_dock_widget::save_settings ();
 
@@ -534,9 +530,10 @@
             QString abs_fname = fileInfo.absoluteFilePath ();
 
             QString suffix = fileInfo.suffix ().toLower ();
-            resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-            gui_settings *settings = rmgr.get_settings ();
-            QString ext = settings->value (fb_txt_file_ext).toString ();
+
+            gui_settings settings;
+
+            QString ext = settings.value (fb_txt_file_ext).toString ();
 #if defined (HAVE_QT_SPLITBEHAVIOR_ENUM)
             QStringList extensions = ext.split (";", Qt::SkipEmptyParts);
 #else
@@ -565,13 +562,12 @@
 
   void files_dock_widget::toggle_header (int col)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     QString key = m_columns_shown_keys.at (col);
-    bool shown = settings->value (key, false).toBool ();
-    settings->setValue (key, ! shown);
-    settings->sync ();
+    bool shown = settings.value (key, false).toBool ();
+    settings.setValue (key, ! shown);
+    settings.sync ();
 
     switch (col)
       {
@@ -584,7 +580,7 @@
       case 3:
       case 4:
         // other actions depending on new settings
-        notice_settings (settings);
+        notice_settings ();
         break;
       }
   }
@@ -597,8 +593,7 @@
       delete m_sig_mapper;
     m_sig_mapper = new QSignalMapper (this);
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     for (int i = 0; i < m_columns_shown.size (); i++)
       {
@@ -607,8 +602,8 @@
         m_sig_mapper->setMapping (action, i);
         action->setCheckable (true);
         action->setChecked
-          (settings->value (m_columns_shown_keys.at (i),
-                            m_columns_shown_defs.at (i)).toBool ());
+          (settings.value (m_columns_shown_keys.at (i),
+                           m_columns_shown_defs.at (i)).toBool ());
       }
 
     // FIXME: We could use
@@ -1007,11 +1002,13 @@
       }
   }
 
-  void files_dock_widget::notice_settings (const gui_settings *settings)
+  void files_dock_widget::notice_settings (void)
   {
+    gui_settings settings;
+
     // QSettings pointer is checked before emitting.
 
-    int size_idx = settings->value (global_icon_size).toInt ();
+    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 ();
@@ -1021,22 +1018,22 @@
     // filenames are always shown, other columns can be hidden by settings
     for (int i = 0; i < 3; i++)
       m_file_tree_view->setColumnHidden (i + 1,
-                                         ! settings->value (m_columns_shown_keys.at (i),false).toBool ());
+                                         ! settings.value (m_columns_shown_keys.at (i),false).toBool ());
 
     QDir::Filters current_filter = m_file_system_model->filter ();
-    if (settings->value (m_columns_shown_keys.at (3), false).toBool ())
+    if (settings.value (m_columns_shown_keys.at (3), false).toBool ())
       m_file_system_model->setFilter (current_filter | QDir::Hidden);
     else
       m_file_system_model->setFilter (current_filter & (~QDir::Hidden));
 
     m_file_tree_view->setAlternatingRowColors
-      (settings->value (m_columns_shown_keys.at (4),true).toBool ());
+      (settings.value (m_columns_shown_keys.at (4),true).toBool ());
     m_file_tree_view->setModel (m_file_system_model);
 
     // enable the buttons to sync octave/browser dir
     // only if this is not done by default
     m_sync_octave_dir
-      = settings->value (fb_sync_octdir).toBool ();
+      = settings.value (fb_sync_octdir).toBool ();
     m_sync_octave_directory_action->setEnabled (! m_sync_octave_dir);
     m_sync_browser_directory_action->setEnabled (! m_sync_octave_dir);
 
@@ -1064,9 +1061,10 @@
   {
     // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
     int opts = QFileDialog::ShowDirsOnly;
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    if (! settings->value (global_use_native_dialogs).toBool ())
+
+    gui_settings settings;
+
+    if (! settings.value (global_use_native_dialogs).toBool ())
       opts |= QFileDialog::DontUseNativeDialog;
 
     QString dir = QFileDialog::getExistingDirectory (this,
--- a/libgui/src/files-dock-widget.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/files-dock-widget.h	Fri Dec 02 14:23:53 2022 -0500
@@ -131,7 +131,7 @@
 
     //! Tells the widget to react on changed settings.
 
-    void notice_settings (const gui_settings *settings);
+    void notice_settings (void);
 
     void save_settings (void);
 
--- a/libgui/src/find-files-dialog.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/find-files-dialog.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -49,6 +49,7 @@
 #include "find-files-model.h"
 #include "gui-preferences-global.h"
 #include "gui-preferences-ff.h"
+#include "gui-settings.h"
 #include "octave-qobject.h"
 
 namespace octave
@@ -67,20 +68,20 @@
     connect (m_timer, &QTimer::timeout,
              this, &find_files_dialog::look_for_files);
 
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     QLabel *file_name_label = new QLabel (tr ("Named:"));
     m_file_name_edit = new QLineEdit;
     m_file_name_edit->setToolTip (tr ("Enter the filename search expression"));
 
-    m_file_name_edit->setText (settings->value (ff_file_name).toString ());
+    m_file_name_edit->setText (settings.value (ff_file_name).toString ());
     file_name_label->setBuddy (m_file_name_edit);
 
     QLabel *start_dir_label = new QLabel (tr ("Start in:"));
 
     m_start_dir_edit = new QLineEdit;
-    m_start_dir_edit->setText (settings->value (ff_start_dir.key,
-                                                QDir::currentPath ()).toString ());
+    m_start_dir_edit->setText (settings.value (ff_start_dir.key,
+                                               QDir::currentPath ()).toString ());
     m_start_dir_edit->setToolTip (tr ("Enter the start directory"));
     start_dir_label->setBuddy (m_start_dir_edit);
 
@@ -90,27 +91,27 @@
              this, &find_files_dialog::browse_folders);
 
     m_recurse_dirs_check = new QCheckBox (tr ("Search subdirectories"));
-    m_recurse_dirs_check->setChecked (settings->value (ff_recurse_dirs).toBool ());
+    m_recurse_dirs_check->setChecked (settings.value (ff_recurse_dirs).toBool ());
     m_recurse_dirs_check->setToolTip (tr ("Search recursively through directories for matching files"));
 
     m_include_dirs_check = new QCheckBox (tr ("Include directory names"));
-    m_include_dirs_check->setChecked (settings->value (ff_include_dirs).toBool ());
+    m_include_dirs_check->setChecked (settings.value (ff_include_dirs).toBool ());
     m_include_dirs_check->setToolTip (tr ("Include matching directories in search results"));
 
     m_name_case_check = new QCheckBox (tr ("Name case insensitive"));
-    m_name_case_check->setChecked (settings->value (ff_name_case).toBool ());
+    m_name_case_check->setChecked (settings.value (ff_name_case).toBool ());
     m_name_case_check->setToolTip (tr ("Set matching name is case insensitive"));
 
     m_contains_text_check = new QCheckBox (tr ("Contains text:"));
     m_contains_text_check->setToolTip (tr ("Enter the file content search expression"));
-    m_contains_text_check->setChecked (settings->value (ff_check_text).toBool ());
+    m_contains_text_check->setChecked (settings.value (ff_check_text).toBool ());
 
     m_contains_text_edit = new QLineEdit ();
     m_contains_text_edit->setToolTip (tr ("Text to match"));
-    m_contains_text_edit->setText (settings->value (ff_contains_text).toString ());
+    m_contains_text_edit->setText (settings.value (ff_contains_text).toString ());
 
     m_content_case_check = new QCheckBox (tr ("Text case insensitive"));
-    m_content_case_check->setChecked (settings->value (ff_content_case).toBool ());
+    m_content_case_check->setChecked (settings.value (ff_content_case).toBool ());
     m_content_case_check->setToolTip (tr ("Set text content is case insensitive"));
 
     find_files_model *model = new find_files_model (this);
@@ -124,13 +125,13 @@
     m_file_list->setAlternatingRowColors (true);
     m_file_list->setToolTip (tr ("Search results"));
     m_file_list->setSortingEnabled (true);
-    m_file_list->horizontalHeader ()->restoreState (settings->value (ff_column_state.key).toByteArray ());
+    m_file_list->horizontalHeader ()->restoreState (settings.value (ff_column_state.key).toByteArray ());
     m_file_list->horizontalHeader ()->setSortIndicatorShown (true);
     m_file_list->horizontalHeader ()->setSectionsClickable (true);
     m_file_list->horizontalHeader ()->setStretchLastSection (true);
-    m_file_list->sortByColumn (settings->value (ff_sort_files_by_column).toInt (),
+    m_file_list->sortByColumn (settings.value (ff_sort_files_by_column).toInt (),
                                static_cast<Qt::SortOrder>
-                               (settings->value (ff_sort_files_by_order).toUInt ()));
+                               (settings.value (ff_sort_files_by_order).toUInt ()));
                 // FIXME: use value<Qt::SortOrder> instead of static cast after
                 //        dropping support of Qt 5.4
 
@@ -209,32 +210,28 @@
 
   void find_files_dialog::save_settings (void)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-
-    if (! settings)
-      return;
+    gui_settings settings;
 
     int sort_column = m_file_list->horizontalHeader ()->sortIndicatorSection ();
     Qt::SortOrder sort_order
       = m_file_list->horizontalHeader ()->sortIndicatorOrder ();
-    settings->setValue (ff_sort_files_by_column.key, sort_column);
-    settings->setValue (ff_sort_files_by_order.key, sort_order);
-    settings->setValue (ff_column_state.key, m_file_list->horizontalHeader ()->saveState ());
+    settings.setValue (ff_sort_files_by_column.key, sort_column);
+    settings.setValue (ff_sort_files_by_order.key, sort_order);
+    settings.setValue (ff_column_state.key, m_file_list->horizontalHeader ()->saveState ());
 
-    settings->setValue (ff_file_name.key, m_file_name_edit->text ());
+    settings.setValue (ff_file_name.key, m_file_name_edit->text ());
 
-    settings->setValue (ff_start_dir.key, m_start_dir_edit->text ());
+    settings.setValue (ff_start_dir.key, m_start_dir_edit->text ());
 
-    settings->setValue (ff_recurse_dirs.key, m_recurse_dirs_check->text ());
-    settings->setValue (ff_include_dirs.key, m_include_dirs_check->text ());
-    settings->setValue (ff_name_case.key, m_name_case_check->text ());
+    settings.setValue (ff_recurse_dirs.key, m_recurse_dirs_check->text ());
+    settings.setValue (ff_include_dirs.key, m_include_dirs_check->text ());
+    settings.setValue (ff_name_case.key, m_name_case_check->text ());
 
-    settings->setValue (ff_contains_text.key, m_contains_text_edit->text ());
-    settings->setValue (ff_check_text.key, m_contains_text_check->isChecked ());
-    settings->setValue (ff_content_case.key, m_content_case_check->isChecked ());
+    settings.setValue (ff_contains_text.key, m_contains_text_edit->text ());
+    settings.setValue (ff_check_text.key, m_contains_text_check->isChecked ());
+    settings.setValue (ff_content_case.key, m_content_case_check->isChecked ());
 
-    settings->sync ();
+    settings.sync ();
   }
 
   void find_files_dialog::set_search_dir (const QString& dir)
@@ -311,10 +308,12 @@
   void find_files_dialog::browse_folders (void)
   {
     int opts = 0;  // No options by default.
+
     // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    if (! settings->value (global_use_native_dialogs).toBool ())
+
+    gui_settings settings;
+
+    if (! settings.value (global_use_native_dialogs).toBool ())
       opts = QFileDialog::DontUseNativeDialog;
 
     QString dir =
--- a/libgui/src/history-dock-widget.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/history-dock-widget.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -38,6 +38,7 @@
 #include "gui-preferences-cs.h"
 #include "gui-preferences-global.h"
 #include "gui-preferences-hw.h"
+#include "gui-settings.h"
 #include "history-dock-widget.h"
 #include "octave-qobject.h"
 
@@ -87,21 +88,17 @@
 
   void history_dock_widget::save_settings (void)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
-    if (! settings)
-      return;
-
-    settings->setValue (hw_filter_active.key, m_filter_checkbox->isChecked ());
-    settings->setValue (hw_filter_shown.key, m_filter_shown);
+    settings.setValue (hw_filter_active.key, m_filter_checkbox->isChecked ());
+    settings.setValue (hw_filter_shown.key, m_filter_shown);
 
     QStringList mru;
     for (int i = 0; i < m_filter->count (); i++)
       mru.append (m_filter->itemText (i));
-    settings->setValue (hw_mru_list.key, mru);
+    settings.setValue (hw_mru_list.key, mru);
 
-    settings->sync ();
+    settings.sync ();
 
     octave_dock_widget::save_settings ();
   }
@@ -330,17 +327,15 @@
     widget ()->setLayout (hist_layout);
 
     // Init state of the filter
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
 
-    m_filter_shown
-      = settings->value (hw_filter_shown).toBool ();
+    gui_settings settings;
+
+    m_filter_shown = settings.value (hw_filter_shown).toBool ();
     m_filter_widget->setVisible (m_filter_shown);
 
-    m_filter->addItems (settings->value (hw_mru_list).toStringList ());
+    m_filter->addItems (settings.value (hw_mru_list).toStringList ());
 
-    bool filter_state
-      = settings->value (hw_filter_active).toBool ();
+    bool filter_state = settings.value (hw_filter_active).toBool ();
     m_filter_checkbox->setChecked (filter_state);
     filter_activate (filter_state);
 
@@ -359,15 +354,17 @@
     m_history_list_view->setTextElideMode (Qt::ElideRight);
   }
 
-  void history_dock_widget::notice_settings (const gui_settings *settings)
+  void history_dock_widget::notice_settings (void)
   {
+    gui_settings settings;
+
     QFont font = QFont ();
 
     font.setStyleHint (QFont::TypeWriter);
-    QString default_font = settings->value (global_mono_font).toString ();
+    QString default_font = settings.value (global_mono_font).toString ();
 
-    font.setFamily (settings->value (cs_font.key, default_font).toString ());
-    font.setPointSize (settings->value (cs_font_size).toInt ());
+    font.setFamily (settings.value (cs_font.key, default_font).toString ());
+    font.setPointSize (settings.value (cs_font_size).toInt ());
 
     m_history_list_view->setFont (font);
   }
--- a/libgui/src/history-dock-widget.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/history-dock-widget.h	Fri Dec 02 14:23:53 2022 -0500
@@ -67,7 +67,7 @@
     void append_history (const QString& hist_entry);
     void clear_history (void);
     void save_settings (void);
-    void notice_settings (const gui_settings *);
+    void notice_settings (void);
 
   private slots:
 
--- a/libgui/src/m-editor/file-editor-interface.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/m-editor/file-editor-interface.h	Fri Dec 02 14:23:53 2022 -0500
@@ -30,7 +30,6 @@
 #include <QMenuBar>
 #include <QToolBar>
 
-#include "gui-settings.h"
 #include "octave-dock-widget.h"
 
 namespace octave
@@ -74,7 +73,7 @@
 
     virtual void empty_script (bool, bool) = 0;
 
-    virtual void restore_session (gui_settings *) = 0;
+    virtual void restore_session (void) = 0;
 
     virtual void enable_menu_shortcuts (bool enable) = 0;
 
--- a/libgui/src/m-editor/file-editor-tab.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/m-editor/file-editor-tab.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -71,6 +71,7 @@
 #include "gui-preferences-cs.h"
 #include "gui-preferences-ed.h"
 #include "gui-preferences-global.h"
+#include "gui-settings.h"
 #include "gui-utils.h"
 #include "marker.h"
 #include "octave-qobject.h"
@@ -266,13 +267,12 @@
     connect (this, &file_editor_tab::do_save_file_signal,
              this, &file_editor_tab::do_save_file);
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    if (settings)
-      notice_settings (settings, true);
+    notice_settings (true);
+
+    gui_settings settings;
 
     // encoding, not updated with the settings
-    m_encoding = settings->value (ed_default_enc.key, "UTF-8").toString ();
+    m_encoding = settings.value (ed_default_enc.key, "UTF-8").toString ();
     m_enc_indicator->setText (m_encoding);
     // no changes in encoding yet
     m_new_encoding = m_encoding;
@@ -713,8 +713,7 @@
   {
     QsciLexer *lexer = m_edit_area->lexer ();
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     if (m_lexer_apis)
       {
@@ -743,9 +742,9 @@
 
         // get settings which infos are used for octave
         bool octave_builtins
-          = settings->value (ed_code_completion_octave_builtins).toBool ();
+          = settings.value (ed_code_completion_octave_builtins).toBool ();
         bool octave_functions
-          = settings->value (ed_code_completion_octave_functions).toBool ();
+          = settings.value (ed_code_completion_octave_functions).toBool ();
 
         QCoreApplication::setApplicationName (tmp_app_name);  // Restore name
 
@@ -883,8 +882,9 @@
     if (update_apis_only)
       return;   // We are done here
 
-    int mode = settings->value (ed_color_mode).toInt ();
-    rmgr.read_lexer_settings (lexer, settings, mode);
+    int mode = settings.value (ed_color_mode).toInt ();
+    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
+    rmgr.read_lexer_settings (lexer, mode);
 
     m_edit_area->setCaretForegroundColor (lexer->color (0));
     m_edit_area->setIndentationGuidesForegroundColor (lexer->color (0));
@@ -908,7 +908,7 @@
     m_edit_area->setFoldMarginColors (bgm, fgm);
 
     QColor current_line_bg
-      = settings->color_value (ed_highlight_current_line_color, mode);
+      = settings.color_value (ed_highlight_current_line_color, mode);
     if (current_line_bg == settings_color_no_change)
        bgm = interpolate_color (bg, fg, 0.5, 0.1);  // It is the "auto" color
      else
@@ -923,7 +923,7 @@
 
     // fix line number width with respect to the font size of the lexer and
     // set the line numbers font depending on the lexer's font
-    if (settings->value (ed_show_line_numbers).toBool ())
+    if (settings.value (ed_show_line_numbers).toBool ())
       {
         // Line numbers width
         auto_margin_width ();
@@ -932,7 +932,7 @@
         QFont line_numbers_font = lexer->defaultFont ();
         int font_size = line_numbers_font.pointSize ();
         font_size = font_size
-                    + settings->value (ed_line_numbers_size).toInt ();
+                    + settings.value (ed_line_numbers_size).toInt ();
         if (font_size < 4)
           font_size = 4;
         line_numbers_font.setPointSize (font_size);
@@ -1535,20 +1535,19 @@
         if (input_str)
           {
             bool ok;
-            resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-            gui_settings *settings = rmgr.get_settings ();
+            gui_settings settings;
 
             used_comment_str
               = QInputDialog::getText (this, tr ("Comment selected text"),
                                        tr ("Comment string to use:\n"),
                                        QLineEdit::Normal,
-                                       settings->value (ed_last_comment_str, comment_str.at (0)).toString (),
+                                       settings.value (ed_last_comment_str, comment_str.at (0)).toString (),
                                        &ok);
 
             if ((! ok) || used_comment_str.isEmpty ())
               return;  // No input, do nothing
             else
-              settings->setValue (ed_last_comment_str, used_comment_str);  // Store last
+              settings.setValue (ed_last_comment_str, used_comment_str);  // Store last
           }
       }
     else
@@ -1824,10 +1823,10 @@
     QByteArray text_data = file.readAll ();
 
     // remove newline at end of file if we add one again when saving
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-
-    if (settings->value (ed_force_newline).toBool ())
+
+    gui_settings settings;
+
+    if (settings.value (ed_force_newline).toBool ())
       {
         const QByteArray eol_lf = QByteArray (1, 0x0a);
         const QByteArray eol_cr = QByteArray (1, 0x0d);
@@ -1968,10 +1967,10 @@
     int count_lf = text.count (eol_lf) - count_crlf;  // isolated lf
     int count_cr = text.count (eol_cr) - count_crlf;  // isolated cr
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
+
     QsciScintilla::EolMode eol_mode
-      = static_cast<QsciScintilla::EolMode> (settings->value (ed_default_eol_mode).toInt ());
+      = static_cast<QsciScintilla::EolMode> (settings.value (ed_default_eol_mode).toInt ());
 
     int count_max = 0;
 
@@ -2052,12 +2051,11 @@
   {
     update_window_title (false); // window title (no modification)
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     // set the eol mode from the settings or depending on the OS if the entry is
     // missing in the settings
-    m_edit_area->setEolMode (static_cast<QsciScintilla::EolMode> (settings->value (ed_default_eol_mode).toInt ()));
+    m_edit_area->setEolMode (static_cast<QsciScintilla::EolMode> (settings.value (ed_default_eol_mode).toInt ()));
 
     update_eol_indicator ();
 
@@ -2229,10 +2227,10 @@
       m_file_system_watcher.removePath (file_to_save);
 
     // Remove trailing white spaces if desired
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-
-    if (settings->value (ed_rm_trailing_spaces).toBool ())
+
+    gui_settings settings;
+
+    if (settings.value (ed_rm_trailing_spaces).toBool ())
       {
         // Replace trailing spaces, make sure edit area is writable,
         // which is not the case when saving at exit or when closing
@@ -2280,7 +2278,7 @@
     QApplication::setOverrideCursor (Qt::WaitCursor);
 
     out << m_edit_area->text ();
-    if (settings->value (ed_force_newline).toBool ()
+    if (settings.value (ed_force_newline).toBool ()
         && m_edit_area->text ().length ())
       out << m_edit_area->eol_string ();   // Add newline if desired
 
@@ -2385,9 +2383,10 @@
     fileDialog->setOption (QFileDialog::HideNameFilterDetails, false);
 
     // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    if (! settings->value (global_use_native_dialogs).toBool ())
+
+    gui_settings settings;
+
+    if (! settings.value (global_use_native_dialogs).toBool ())
       {
         // Qt file dialogs
         fileDialog->setOption(QFileDialog::DontUseNativeDialog);
@@ -2688,16 +2687,15 @@
       }
   }
 
-  void file_editor_tab::notice_settings (const gui_settings *settings, bool init)
+  void file_editor_tab::notice_settings (bool init)
   {
-    if (! settings)
-      return;
+    gui_settings settings;
 
     if (! init)
       update_lexer_settings ();
 
     // code folding
-    if (settings->value (ed_code_folding).toBool ())
+    if (settings.value (ed_code_folding).toBool ())
       {
         m_edit_area->setMarginType (3, QsciScintilla::SymbolMargin);
         m_edit_area->setFolding (QsciScintilla::BoxedTreeFoldStyle, 3);
@@ -2708,19 +2706,19 @@
       }
 
     // status bar
-    if (settings->value (ed_show_edit_status_bar).toBool ())
+    if (settings.value (ed_show_edit_status_bar).toBool ())
       m_status_bar->show ();
     else
       m_status_bar->hide ();
 
     //highlight current line color
     m_edit_area->setCaretLineVisible
-      (settings->value (ed_highlight_current_line).toBool ());
+      (settings.value (ed_highlight_current_line).toBool ());
 
     // auto completion
-    bool match_keywords = settings->value
+    bool match_keywords = settings.value
                           (ed_code_completion_keywords).toBool ();
-    bool match_document = settings->value
+    bool match_document = settings.value
                           (ed_code_completion_document).toBool ();
 
     QsciScintilla::AutoCompletionSource source = QsciScintilla::AcsNone;
@@ -2734,30 +2732,30 @@
     m_edit_area->setAutoCompletionSource (source);
 
     m_edit_area->setAutoCompletionReplaceWord
-      (settings->value (ed_code_completion_replace).toBool ());
+      (settings.value (ed_code_completion_replace).toBool ());
     m_edit_area->setAutoCompletionCaseSensitivity
-      (settings->value (ed_code_completion_case).toBool ());
-
-    if (settings->value (ed_code_completion).toBool ())
+      (settings.value (ed_code_completion_case).toBool ());
+
+    if (settings.value (ed_code_completion).toBool ())
       m_edit_area->setAutoCompletionThreshold
-        (settings->value (ed_code_completion_threshold).toInt ());
+        (settings.value (ed_code_completion_threshold).toInt ());
     else
       m_edit_area->setAutoCompletionThreshold (-1);
 
-    if (settings->value (ed_show_white_space).toBool ())
-      if (settings->value (ed_show_white_space_indent).toBool ())
+    if (settings.value (ed_show_white_space).toBool ())
+      if (settings.value (ed_show_white_space_indent).toBool ())
         m_edit_area->setWhitespaceVisibility (QsciScintilla::WsVisibleAfterIndent);
       else
         m_edit_area->setWhitespaceVisibility (QsciScintilla::WsVisible);
     else
       m_edit_area->setWhitespaceVisibility (QsciScintilla::WsInvisible);
 
-    m_edit_area->setEolVisibility (settings->value (ed_show_eol_chars).toBool ());
+    m_edit_area->setEolVisibility (settings.value (ed_show_eol_chars).toBool ());
 
     m_save_as_desired_eol = static_cast<QsciScintilla::EolMode>
-                              (settings->value (ed_default_eol_mode).toInt ());
-
-    if (settings->value (ed_show_line_numbers).toBool ())
+                              (settings.value (ed_default_eol_mode).toInt ());
+
+    if (settings.value (ed_show_line_numbers).toBool ())
       {
         m_edit_area->setMarginLineNumbers (2, true);
         auto_margin_width ();
@@ -2770,46 +2768,46 @@
         disconnect (m_edit_area, SIGNAL (linesChanged ()), nullptr, nullptr);
       }
 
-    m_smart_indent = settings->value (ed_auto_indent).toBool ();
+    m_smart_indent = settings.value (ed_auto_indent).toBool ();
     m_edit_area->setAutoIndent (m_smart_indent);
     m_edit_area->setTabIndents
-      (settings->value (ed_tab_indents_line).toBool ());
+      (settings.value (ed_tab_indents_line).toBool ());
     m_edit_area->setBackspaceUnindents
-      (settings->value (ed_backspace_unindents_line).toBool ());
+      (settings.value (ed_backspace_unindents_line).toBool ());
     m_edit_area->setIndentationGuides
-      (settings->value (ed_show_indent_guides).toBool ());
+      (settings.value (ed_show_indent_guides).toBool ());
     m_edit_area->setIndentationsUseTabs
-      (settings->value (ed_indent_uses_tabs).toBool ());
+      (settings.value (ed_indent_uses_tabs).toBool ());
     m_edit_area->setIndentationWidth
-      (settings->value (ed_indent_width).toInt ());
+      (settings.value (ed_indent_width).toInt ());
 
     m_edit_area->setTabWidth
-      (settings->value (ed_tab_width).toInt ());
+      (settings.value (ed_tab_width).toInt ());
 
     m_ind_char_width = 1;
     if (m_edit_area->indentationsUseTabs ())
       m_ind_char_width = m_edit_area->tabWidth ();
 
     m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETHSCROLLBAR,
-                                settings->value (ed_show_hscroll_bar).toBool ());
+                                settings.value (ed_show_hscroll_bar).toBool ());
     m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETSCROLLWIDTH,-1);
     m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETSCROLLWIDTHTRACKING,true);
 
     update_window_title (m_edit_area->isModified ());
 
-    m_auto_endif = settings->value (ed_auto_endif).toInt ();
+    m_auto_endif = settings.value (ed_auto_endif).toInt ();
 
     // long line marker
-    int line_length = settings->value (ed_long_line_column).toInt ();
+    int line_length = settings.value (ed_long_line_column).toInt ();
     m_edit_area->setEdgeColumn (line_length);
 
-    if (settings->value (ed_long_line_marker).toBool ())
+    if (settings.value (ed_long_line_marker).toBool ())
       {
-        if (settings->value (ed_long_line_marker_line).toBool ())
+        if (settings.value (ed_long_line_marker_line).toBool ())
           m_edit_area->setEdgeMode (QsciScintilla::EdgeLine);
         else
           {
-            if (settings->value (ed_long_line_marker_background)
+            if (settings.value (ed_long_line_marker_background)
                 .toBool ())
               m_edit_area->setEdgeMode (QsciScintilla::EdgeBackground);
             else
@@ -2823,36 +2821,36 @@
     m_edit_area->setWrapVisualFlags (QsciScintilla::WrapFlagByBorder);
     m_edit_area->setWrapIndentMode (QsciScintilla::WrapIndentSame);
 
-    if (settings->value (ed_wrap_lines).toBool ())
+    if (settings.value (ed_wrap_lines).toBool ())
       m_edit_area->setWrapMode (QsciScintilla::WrapWord);
     else
       m_edit_area->setWrapMode (QsciScintilla::WrapNone);
 
-    if (settings->value (ed_break_lines).toBool ())
+    if (settings.value (ed_break_lines).toBool ())
       m_line_break = line_length;
     else
       m_line_break = 0;
 
     m_line_break_comments =
-      settings->value (ed_break_lines_comments).toBool ();
+      settings.value (ed_break_lines_comments).toBool ();
 
     // highlight all occurrences of a word selected by a double click
     m_highlight_all_occurrences =
-      settings->value (ed_highlight_all_occurrences).toBool ();
+      settings.value (ed_highlight_all_occurrences).toBool ();
 
     // reload changed files
     m_always_reload_changed_files =
-      settings->value (ed_always_reload_changed_files).toBool ();
+      settings.value (ed_always_reload_changed_files).toBool ();
 
     // Set cursor blinking depending on the settings.
     // QScintilla ignores the application global settings, so some special
     // handling is required
     bool cursor_blinking;
 
-    if (settings->contains (global_cursor_blinking.key))
-      cursor_blinking = settings->value (global_cursor_blinking).toBool ();
+    if (settings.contains (global_cursor_blinking.key))
+      cursor_blinking = settings.value (global_cursor_blinking).toBool ();
     else
-      cursor_blinking = settings->value (cs_cursor_blinking).toBool ();
+      cursor_blinking = settings.value (cs_cursor_blinking).toBool ();
 
     if (cursor_blinking)
       m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETCARETPERIOD, 500);
--- a/libgui/src/m-editor/file-editor-tab.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/m-editor/file-editor-tab.h	Fri Dec 02 14:23:53 2022 -0500
@@ -36,7 +36,6 @@
 #include <QWidget>
 #include <Qsci/qsciapis.h>
 
-#include "gui-settings.h"
 #include "marker.h"
 #include "octave-qscintilla.h"
 #include "qt-interpreter-events.h"
@@ -138,7 +137,7 @@
                                 Qt::KeyboardModifiers state);
 
     // Tells the editor tab to react on changed settings.
-    void notice_settings (const gui_settings *settings, bool init = false);
+    void notice_settings (bool init = false);
 
     // Change to a different editor tab by identifier tag.
     void change_editor_state (const QWidget *ID);
--- 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
--- a/libgui/src/m-editor/file-editor.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/m-editor/file-editor.h	Fri Dec 02 14:23:53 2022 -0500
@@ -124,11 +124,11 @@
 
     void check_actions (void);
     void empty_script (bool startup, bool visible);
-    void restore_session (gui_settings *settings);
+    void restore_session (void);
 
   signals:
 
-    void fetab_settings_changed (const gui_settings *settings);
+    void fetab_settings_changed (void);
     void fetab_change_request (const QWidget *ID);
     // Save is a ping-pong type of communication
     void fetab_save_file (const QWidget *ID, const QString& fileName,
@@ -287,7 +287,7 @@
     void handle_file_renamed (bool load_new = true);
 
     // Tells the editor to react on changed settings.
-    void notice_settings (const gui_settings *settings);
+    void notice_settings (void);
 
     void set_shortcuts (void);
 
--- a/libgui/src/m-editor/find-dialog.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/m-editor/find-dialog.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -218,8 +218,7 @@
 
   void find_dialog::save_settings ()
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *s = rmgr.get_settings ();
+    gui_settings settings;
 
     // Save position
     QPoint dlg_pos = pos ();
@@ -232,7 +231,7 @@
 
     m_last_position = QPoint (dlg_pos.x (), y);
 
-    s->setValue (ed_fdlg_pos.key, m_last_position);
+    settings.setValue (ed_fdlg_pos.key, m_last_position);
 
     // Is current search/replace text in the mru list?
     mru_update (m_search_line_edit);
@@ -242,12 +241,12 @@
     QStringList mru;
     for (int i = 0; i < m_search_line_edit->count (); i++)
       mru.append (m_search_line_edit->itemText (i));
-    s->setValue (ed_fdlg_search.key, mru);
+    settings.setValue (ed_fdlg_search.key, mru);
 
     mru.clear ();
     for (int i = 0; i < m_replace_line_edit->count (); i++)
       mru.append (m_replace_line_edit->itemText (i));
-    s->setValue (ed_fdlg_replace.key, mru);
+    settings.setValue (ed_fdlg_replace.key, mru);
 
     // Store dialog's options
     int opts = 0
@@ -259,29 +258,28 @@
                + m_whole_words_check_box->isChecked () * FIND_DLG_WORDS
                + m_backward_check_box->isChecked () * FIND_DLG_BACK
                + m_search_selection_check_box->isChecked () * FIND_DLG_SEL;
-    s->setValue (ed_fdlg_opts.key, opts);
+    settings.setValue (ed_fdlg_opts.key, opts);
 
-    s->sync ();
+    settings.sync ();
   }
 
   void find_dialog::restore_settings (QPoint ed_bottom_right)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *s = rmgr.get_settings ();
+    gui_settings settings;
 
     // Get mru lists for search and replace text
-    QStringList mru = s->value (ed_fdlg_search.key).toStringList ();
+    QStringList mru = settings.value (ed_fdlg_search.key).toStringList ();
     while (mru.length () > m_mru_length)
       mru.removeLast ();
     m_search_line_edit->addItems (mru);
 
-    mru = s->value (ed_fdlg_replace.key).toStringList ();
+    mru = settings.value (ed_fdlg_replace.key).toStringList ();
     while (mru.length () > m_mru_length)
       mru.removeLast ();
     m_replace_line_edit->addItems (mru);
 
     // Get the dialog's options
-    int opts = s->value (ed_fdlg_opts.key, ed_fdlg_opts.def).toInt ();
+    int opts = settings.value (ed_fdlg_opts.key, ed_fdlg_opts.def).toInt ();
 
     m_extension->setVisible (FIND_DLG_MORE & opts);
     m_case_check_box->setChecked (FIND_DLG_CASE & opts);
@@ -298,7 +296,7 @@
     QRect default_geometry (xp, yp, sizeHint ().width (), sizeHint ().height ());
 
     // Last position from settings
-    m_last_position = s->value (ed_fdlg_pos.key, QPoint (xp, yp)).toPoint ();
+    m_last_position = settings.value (ed_fdlg_pos.key, QPoint (xp, yp)).toPoint ();
     QRect last_geometry (m_last_position,
                          QSize (sizeHint ().width (), sizeHint ().height ()));
 
--- a/libgui/src/m-editor/octave-qscintilla.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/m-editor/octave-qscintilla.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -54,6 +54,7 @@
 
 #include "file-editor-tab.h"
 #include "gui-preferences-ed.h"
+#include "gui-settings.h"
 // FIXME: hardwired marker numbers?
 #include "marker.h"
 #include "octave-qobject.h"
@@ -430,20 +431,20 @@
       case SCLEX_MATLAB:
 #endif
         {
-          resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-          gui_settings *settings = rmgr.get_settings ();
+          gui_settings settings;
+
           int comment_string;
 
           if (comment)
             {
               // The commenting string is requested
-              if (settings->contains (ed_comment_str.key))
+              if (settings.contains (ed_comment_str.key))
                 // new version (radio buttons)
-                comment_string = settings->value (ed_comment_str).toInt ();
+                comment_string = settings.value (ed_comment_str).toInt ();
               else
                 // old version (combo box)
-                comment_string = settings->value (ed_comment_str_old.key,
-                                                  ed_comment_str.def).toInt ();
+                comment_string = settings.value (ed_comment_str_old.key,
+                                                 ed_comment_str.def).toInt ();
 
               return (QStringList (ed_comment_strings.at (comment_string)));
             }
@@ -452,7 +453,7 @@
               QStringList c_str;
 
               // The possible uncommenting string(s) are requested
-              comment_string = settings->value (ed_uncomment_str).toInt ();
+              comment_string = settings.value (ed_uncomment_str).toInt ();
 
               for (int i = 0; i < ed_comment_strings_count; i++)
                 {
@@ -908,9 +909,10 @@
         });
 
     // Disable opening a file at a breakpoint in case keyboard () is used
-    gui_settings *settings = rmgr.get_settings ();
-    bool show_dbg_file = settings->value (ed_show_dbg_file).toBool ();
-    settings->setValue (ed_show_dbg_file.key, false);
+    gui_settings settings;
+
+  bool show_dbg_file = settings.value (ed_show_dbg_file).toBool ();
+    settings.setValue (ed_show_dbg_file.key, false);
 
     // Let the interpreter execute the tmp file
     emit interpreter_event
@@ -1035,8 +1037,10 @@
     //       possible lines from commands at a debug prompt must be
     //       taken into consideration.
     resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    settings->setValue (ed_show_dbg_file.key, show_dbg_file);
+    gui_settings settings;
+
+    settings.setValue (ed_show_dbg_file.key, show_dbg_file);
+
     rmgr.remove_tmp_file (tmp_file);
     rmgr.remove_tmp_file (tmp_hist);
 
--- a/libgui/src/main-window.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/main-window.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -174,24 +174,17 @@
     m_default_style = qapp->style ()->objectName ();
     m_default_palette = qapp->palette ();
 
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     bool connect_to_web = true;
     QDateTime last_checked;
     int serial = 0;
     m_active_dock = nullptr;
 
-    if (settings)
-      {
-        connect_to_web
-          = settings->value (nr_allow_connection).toBool ();
-
-        last_checked
-          = settings->value (nr_last_time).toDateTime ();
-
-        serial = settings->value (nr_last_news).toInt ();
-        m_default_encoding = settings->value (ed_default_enc).toString ();
-      }
+    connect_to_web = settings.value (nr_allow_connection).toBool ();
+    last_checked = settings.value (nr_last_time).toDateTime ();
+    serial = settings.value (nr_last_news).toInt ();
+    m_default_encoding = settings.value (ed_default_enc).toString ();
 
     QDateTime current = QDateTime::currentDateTime ();
     QDateTime one_day_ago = current.addDays (-1);
@@ -508,11 +501,10 @@
   {
     bool closenow = true;
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-
-    if (settings->value (global_prompt_to_exit.key,
-                         global_prompt_to_exit.def).toBool ())
+    gui_settings settings;
+
+    if (settings.value (global_prompt_to_exit.key,
+                        global_prompt_to_exit.def).toBool ())
       {
         int ans = QMessageBox::question (this, tr ("Octave"),
                                          tr ("Are you sure you want to exit Octave?"),
@@ -648,11 +640,7 @@
 
   void main_window::request_reload_settings (void)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-
-    if (settings)
-      emit settings_changed (settings);
+    emit settings_changed ();
   }
 
   void main_window::report_status_message (const QString& statusMessage)
@@ -664,9 +652,10 @@
   {
     // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
     int opts = 0;  // No options by default.
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    if (! settings->value (global_use_native_dialogs).toBool ())
+
+    gui_settings settings;
+
+    if (! settings.value (global_use_native_dialogs).toBool ())
       opts = QFileDialog::DontUseNativeDialog;
 
     QString file
@@ -689,9 +678,10 @@
   {
     // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
     int opts = 0;  // No options by default.
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    if (! settings->value (global_use_native_dialogs).toBool ())
+
+    gui_settings settings;
+
+    if (! settings.value (global_use_native_dialogs).toBool ())
       opts = QFileDialog::DontUseNativeDialog;
 
     QString file = file_arg;
@@ -904,15 +894,13 @@
                         QString::fromStdString (message));
   }
 
-  void main_window::notice_settings (const gui_settings *settings,
-                                     bool update_by_worker)
+  void main_window::notice_settings (bool update_by_worker)
   {
-    if (! settings)
-      return;
+    gui_settings settings;
 
     // Get desired style from preferences or take the default one if
     // the desired one is not found
-    QString preferred_style = settings->value (global_style).toString ();
+    QString preferred_style = settings.value (global_style).toString ();
 
     if (preferred_style == global_style.def.toString ())
       preferred_style = m_default_style;
@@ -938,7 +926,7 @@
       }
 
     // the widget's icons (when floating)
-    QString icon_set = settings->value (dw_icon_set).toString ();
+    QString icon_set = settings.value (dw_icon_set).toString ();
 
     QString icon;
     for (auto *widget : dock_widget_list ())
@@ -954,26 +942,26 @@
           }
       }
 
-    int size_idx = settings->value (global_icon_size).toInt ();
+    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 ();
     int icon_size = st->pixelMetric (global_icon_sizes[size_idx]);
     m_main_tool_bar->setIconSize (QSize (icon_size, icon_size));
 
-    if (settings->value (global_status_bar).toBool ())
+    if (settings.value (global_status_bar).toBool ())
       m_status_bar->show ();
     else
       m_status_bar->hide ();
 
     m_prevent_readline_conflicts
-      = settings->value (sc_prevent_rl_conflicts).toBool ();
+      = settings.value (sc_prevent_rl_conflicts).toBool ();
 
     m_prevent_readline_conflicts_menu
-      = settings->value (sc_prevent_rl_conflicts_menu).toBool ();
+      = settings.value (sc_prevent_rl_conflicts_menu).toBool ();
 
     m_suppress_dbg_location
-      = ! settings->value (cs_dbg_location).toBool ();
+      = ! settings.value (cs_dbg_location).toBool ();
 
     resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
     rmgr.update_network_settings ();
@@ -991,7 +979,7 @@
 
     // Check whether some octave internal preferences have to be updated
     QString new_default_encoding
-      = settings->value (ed_default_enc).toString ();
+      = settings.value (ed_default_enc).toString ();
     // Do not update internal pref only if a) this update was not initiated
     // by the worker and b) the pref has really changes
     if (! update_by_worker && (new_default_encoding != m_default_encoding))
@@ -1003,10 +991,10 @@
     //       getting the cursor blink preferences from all OS environments
     bool cursor_blinking;
 
-    if (settings->contains (global_cursor_blinking.key))
-      cursor_blinking = settings->value (global_cursor_blinking).toBool ();
+    if (settings.contains (global_cursor_blinking.key))
+      cursor_blinking = settings.value (global_cursor_blinking).toBool ();
     else
-      cursor_blinking = settings->value (cs_cursor_blinking).toBool ();
+      cursor_blinking = settings.value (cs_cursor_blinking).toBool ();
 
     if (cursor_blinking)
       QApplication::setCursorFlashTime (1000);  // 1000 ms flash time
@@ -1084,9 +1072,10 @@
   {
     // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
     int opts = QFileDialog::ShowDirsOnly;
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    if (! settings->value (global_use_native_dialogs).toBool ())
+
+    gui_settings settings;
+
+    if (! settings.value (global_use_native_dialogs).toBool ())
       opts = QFileDialog::DontUseNativeDialog;
 
     QString dir
@@ -1339,10 +1328,10 @@
     // Open file isn't a file_editor_tab or editor function since the file
     // might be opened in an external editor.  Hence, functionality is here.
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
+
     bool is_internal = m_editor_window
-                       && ! settings->value (global_use_custom_editor.key,
+                       && ! settings.value (global_use_custom_editor.key,
                                              global_use_custom_editor.def).toBool ();
 
     // Create a NonModal message.
@@ -1358,7 +1347,7 @@
     fileDialog->setDirectory (m_current_directory_combo_box->itemText (0));
 
     // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
-    if (! settings->value (global_use_native_dialogs).toBool ())
+    if (! settings.value (global_use_native_dialogs).toBool ())
       fileDialog->setOption(QFileDialog::DontUseNativeDialog);
 
     connect (fileDialog, &QFileDialog::filesSelected,
@@ -1383,9 +1372,10 @@
     // editor window or the main window.  The latter is chosen, if a custom
     // editor is used or qscintilla is not available
     QWidget *p = m_editor_window;
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    if (! p || settings->value (global_use_custom_editor.key,
+
+    gui_settings settings;
+
+    if (! p || settings.value (global_use_custom_editor.key,
                                 global_use_custom_editor.def).toBool ())
       p = this;
     QString new_name = QInputDialog::getText (p, tr ("New Function"),
@@ -1397,10 +1387,10 @@
         if (new_name.rightRef (2) != ".m")
           new_name.append (".m");
         // check whether new files are created without prompt
-        if (! settings->value (ed_create_new_file).toBool ())
+        if (! settings.value (ed_create_new_file).toBool ())
           {
             // no, so enable this settings and wait for end of new file loading
-            settings->setValue (ed_create_new_file.key, true);
+            settings.setValue (ed_create_new_file.key, true);
             connect (m_editor_window, SIGNAL (file_loaded_signal (void)),
                      this, SLOT (restore_create_file_setting (void)));
           }
@@ -1546,24 +1536,18 @@
 
   void main_window::read_settings (void)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-
-    if (! settings)
-      {
-        qDebug ("Error: gui_settings pointer from resource manager is NULL.");
-        return;
-      }
-
-    set_window_layout (settings);
+    gui_settings settings;
+
+    set_window_layout ();
 
     // restore the list of the last directories
-    QStringList curr_dirs = settings->value (mw_dir_list).toStringList ();
+    QStringList curr_dirs = settings.value (mw_dir_list).toStringList ();
     for (int i=0; i < curr_dirs.size (); i++)
       {
         m_current_directory_combo_box->addItem (curr_dirs.at (i));
       }
-    emit settings_changed (settings);
+
+    emit settings_changed ();
   }
 
   void main_window::init_terminal_size (void)
@@ -1571,15 +1555,17 @@
     emit init_terminal_size_signal ();
   }
 
-  void main_window::set_window_layout (gui_settings *settings)
+  void main_window::set_window_layout (void)
   {
+    gui_settings settings;
+
     // For resetting from some inconsistent state, first reset layout
     // without saving or showing it
     do_reset_windows (true, false);
 
     // Restore main window state and geometry from settings file or, in case
     // of an error (no pref values yet), from the default layout.
-    if (! restoreGeometry (settings->value (mw_geometry).toByteArray ()))
+    if (! restoreGeometry (settings.value (mw_geometry).toByteArray ()))
       {
         do_reset_windows (true);
         return;
@@ -1608,7 +1594,7 @@
                        | Qt::WindowCloseButtonHint);
       }
 
-    if (! restoreState (settings->value (mw_state).toByteArray ()))
+    if (! restoreState (settings.value (mw_state).toByteArray ()))
       {
         do_reset_windows (true);
         return;
@@ -1631,9 +1617,9 @@
             bool floating = false;
             bool visible = true;
 
-            floating = settings->value
+            floating = settings.value
                 (dw_is_floating.key.arg (name), dw_is_floating.def).toBool ();
-            visible = settings->value
+            visible = settings.value
                 (dw_is_visible.key.arg (name), dw_is_visible.def).toBool ();
 
             // If floating, make window from widget.
@@ -1643,8 +1629,8 @@
 
                 if (visible)
                   {
-                    if (settings->value (dw_is_minimized.key.arg (name),
-                                         dw_is_minimized.def).toBool ())
+                    if (settings.value (dw_is_minimized.key.arg (name),
+                                        dw_is_minimized.def).toBool ())
                       widget->showMinimized ();
                     else
                       widget->setVisible (true);
@@ -1668,24 +1654,18 @@
 
   void main_window::write_settings (void)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    if (! settings)
-      {
-        qDebug ("Error: gui_settings pointer from resource manager is NULL.");
-        return;
-      }
-
-    settings->setValue (mw_geometry.key, saveGeometry ());
-    settings->setValue (mw_state.key, saveState ());
+    gui_settings settings;
+
+    settings.setValue (mw_geometry.key, saveGeometry ());
+    settings.setValue (mw_state.key, saveState ());
     // write the list of recently used directories
     QStringList curr_dirs;
     for (int i=0; i<m_current_directory_combo_box->count (); i++)
       {
         curr_dirs.append (m_current_directory_combo_box->itemText (i));
       }
-    settings->setValue (mw_dir_list.key, curr_dirs);
-    settings->sync ();
+    settings.setValue (mw_dir_list.key, curr_dirs);
+    settings.sync ();
   }
 
   void main_window::copyClipboard (void)
@@ -1751,30 +1731,27 @@
   void main_window::handle_octave_ready (void)
   {
     // actions after the startup files are executed
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+
+    gui_settings settings;
 
     QDir startup_dir = QDir ();    // current octave dir after startup
 
-    if (settings)
+    if (settings.value (global_restore_ov_dir).toBool ())
       {
-        if (settings->value (global_restore_ov_dir).toBool ())
-          {
-            // restore last dir from previous session
-            QStringList curr_dirs
-              = settings->value (mw_dir_list).toStringList ();
-            if (curr_dirs.length () > 0)
-              startup_dir = QDir (curr_dirs.at (0));  // last dir prev. session
-          }
-        else if (! settings->value (global_ov_startup_dir).toString ().isEmpty ())
-          {
-            // do not restore but there is a startup dir configured
-            startup_dir
-              = QDir (settings->value (global_ov_startup_dir).toString ());
-          }
-
-        update_default_encoding (settings->value (ed_default_enc).toString ());
+        // restore last dir from previous session
+        QStringList curr_dirs
+          = settings.value (mw_dir_list).toStringList ();
+        if (curr_dirs.length () > 0)
+          startup_dir = QDir (curr_dirs.at (0));  // last dir prev. session
       }
+    else if (! settings.value (global_ov_startup_dir).toString ().isEmpty ())
+      {
+        // do not restore but there is a startup dir configured
+        startup_dir
+          = QDir (settings.value (global_ov_startup_dir).toString ());
+      }
+
+    update_default_encoding (settings.value (ed_default_enc).toString ());
 
     if (! startup_dir.exists ())
       {
@@ -1791,7 +1768,7 @@
         // This can not be done when the editor is created because all functions
         // must be known for the lexer's auto completion information
         m_editor_window->empty_script (true, false);
-        m_editor_window->restore_session (settings);
+        m_editor_window->restore_session ();
 #endif
       }
 
@@ -1928,9 +1905,10 @@
   void main_window::restore_create_file_setting (void)
   {
     // restore the new files creation setting
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    settings->setValue (ed_create_new_file.key, false);
+
+    gui_settings settings;
+
+    settings.setValue (ed_create_new_file.key, false);
     disconnect (m_editor_window, SIGNAL (file_loaded_signal (void)),
                 this, SLOT (restore_create_file_setting (void)));
   }
@@ -2072,8 +2050,9 @@
     connect (qApp, &QApplication::focusChanged,
              this, &main_window::focus_changed);
 
+    // Default argument requires wrapper.
     connect (this, &main_window::settings_changed,
-             this, [=] (const gui_settings *settings) { notice_settings (settings); });
+             this, [=] () { notice_settings (); });
 
     // Connections for signals from the interpreter thread where the slot
     // should be executed by the gui thread
@@ -2652,9 +2631,9 @@
 
   void main_window::focus_console_after_command (void)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    if (settings->value (cs_focus_cmd).toBool ())
+    gui_settings settings;
+
+    if (settings.value (cs_focus_cmd).toBool ())
       focus_command_window ();
   }
 
@@ -2902,11 +2881,10 @@
 
         if (save)
           {
-            resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-            gui_settings *settings = rmgr.get_settings ();
-
-            settings->setValue (mw_geometry.key, saveGeometry ());
-            settings->setValue (mw_state.key, saveState ());
+            gui_settings settings;
+
+            settings.setValue (mw_geometry.key, saveGeometry ());
+            settings.setValue (mw_state.key, saveState ());
           }
 
         focus_command_window ();
--- a/libgui/src/main-window.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/main-window.h	Fri Dec 02 14:23:53 2022 -0500
@@ -99,7 +99,7 @@
     void active_dock_changed (octave_dock_widget *, octave_dock_widget *);
     void editor_focus_changed (bool);
 
-    void settings_changed (const gui_settings *);
+    void settings_changed (void);
     void init_terminal_size_signal (void);
     void init_window_menu (void);
     void new_file_signal (const QString&);
@@ -156,8 +156,7 @@
     void process_settings_dialog_request (const QString& desired_tab
                                           = QString ());
     void show_about_octave (void);
-    void notice_settings (const gui_settings *settings,
-                          bool update_by_worker = false);
+    void notice_settings (bool update_by_worker = false);
     QPalette getFusionDarkPalette();
     void prepare_to_exit (void);
     void go_to_previous_widget (void);
@@ -199,7 +198,7 @@
 
     void read_settings (void);
     void init_terminal_size (void);
-    void set_window_layout (gui_settings *settings);
+    void set_window_layout (void);
     void write_settings (void);
 
     void copyClipboard (void);
--- a/libgui/src/news-reader.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/news-reader.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -35,6 +35,7 @@
 #include "news-reader.h"
 #include "octave-qobject.h"
 #include "gui-preferences-nr.h"
+#include "gui-settings.h"
 
 #include "url-transfer.h"
 #include "version.h"
@@ -68,16 +69,12 @@
           {
             if (m_serial >= 0)
               {
-                resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-                gui_settings *settings = rmgr.get_settings ();
+                gui_settings settings;
 
-                if (settings)
-                  {
-                    settings->setValue (nr_last_time.key,
-                                        QDateTime::currentDateTime ());
+                settings.setValue (nr_last_time.key,
+                                   QDateTime::currentDateTime ());
 
-                    settings->sync ();
-                  }
+                settings.sync ();
 
                 QString tag ("community-news-page-serial=");
 
@@ -95,13 +92,8 @@
 
                     if (curr_page_serial > m_serial)
                       {
-                        if (settings)
-                          {
-                            settings->setValue (nr_last_news.key,
-                                                curr_page_serial);
-
-                            settings->sync ();
-                          }
+                        settings.setValue (nr_last_news.key, curr_page_serial);
+                        settings.sync ();
                       }
                     else
                       return;
--- a/libgui/src/octave-dock-widget.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/octave-dock-widget.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -258,8 +258,7 @@
                  | QDockWidget::DockWidgetMovable
                  | QDockWidget::DockWidgetFloatable);
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    handle_settings (rmgr.get_settings ());
+    handle_settings ();
   }
 
   void
@@ -346,12 +345,12 @@
     bool vis = isVisible ();
 
     // Since floating widget has no parent, we have to read it
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
 
     if (m_main_window)
       {
-        settings->setValue (mw_state.key, m_main_window->saveState ());
+        gui_settings settings;
+
+        settings.setValue (mw_state.key, m_main_window->saveState ());
 
         // Stay window, otherwise will bounce back to window by default
         // because there is no layout information for this widget in the
@@ -360,7 +359,7 @@
         m_main_window->addDockWidget (Qt::BottomDockWidgetArea, this);
         m_adopted = false;
         // recover old window states, hide and re-show new added widget
-        m_main_window->restoreState (settings->value (mw_state.key).toByteArray ());
+        m_main_window->restoreState (settings.value (mw_state.key).toByteArray ());
         setFloating (false);
         // restore size using setGeometry instead of restoreGeometry
         // following this post:
@@ -374,6 +373,8 @@
              this, &octave_dock_widget::make_window);
     if (titleBarWidget ())
       {
+        resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
+
         m_dock_action->setIcon (rmgr.icon ("widget-undock" + m_icon_color, true));
         m_dock_action->setToolTip (tr ("Undock widget"));
       }
@@ -472,28 +473,27 @@
   }
 
   void
-  octave_dock_widget::handle_settings (const gui_settings *settings)
+  octave_dock_widget::handle_settings (void)
   {
-    if (! settings)
-      return;
+    gui_settings settings;
 
-    m_focus_follows_mouse = settings->value (dw_focus_follows_mouse).toBool ();
+    m_focus_follows_mouse = settings.value (dw_focus_follows_mouse).toBool ();
 
     m_custom_style
-      = settings->value (dw_title_custom_style).toBool ();
+      = settings.value (dw_title_custom_style).toBool ();
 
-    m_title_3d = settings->value (dw_title_3d.key, dw_title_3d.def).toInt ();
+    m_title_3d = settings.value (dw_title_3d.key, dw_title_3d.def).toInt ();
 
     m_fg_color
-      = settings->value (dw_title_fg_color).value<QColor> ();
+      = settings.value (dw_title_fg_color).value<QColor> ();
 
     m_fg_color_active
-      = settings->value (dw_title_fg_color_active).value<QColor> ();
+      = settings.value (dw_title_fg_color_active).value<QColor> ();
 
-    m_bg_color = settings->value (dw_title_bg_color).value<QColor> ();
+    m_bg_color = settings.value (dw_title_bg_color).value<QColor> ();
 
     m_bg_color_active
-      = settings->value (dw_title_bg_color_active).value<QColor> ();
+      = settings.value (dw_title_bg_color_active).value<QColor> ();
 
     QColor bcol (m_bg_color);
     QColor bcola (m_bg_color_active);
@@ -536,7 +536,7 @@
       }
 
     m_recent_float_geom
-      = settings->value (dw_float_geometry.key.arg (objectName ()),
+      = settings.value (dw_float_geometry.key.arg (objectName ()),
                          default_floating_size).toRect ();
 
     adjust_to_screen (m_recent_float_geom, default_floating_size);
@@ -545,14 +545,14 @@
     // saveGeomety to new QRect setting (see comment for restoring size
     // of docked widgets)
     QVariant dock_geom
-      = settings->value (dw_dock_geometry.key.arg (objectName ()),
-                         default_dock_size);
+      = settings.value (dw_dock_geometry.key.arg (objectName ()),
+                        default_dock_size);
     if (dock_geom.canConvert (QMetaType::QRect))
       m_recent_dock_geom = dock_geom.toRect ();
     else
       m_recent_dock_geom = dw_dock_geometry.def.toRect ();
 
-    notice_settings (settings);  // call individual handler
+    notice_settings ();  // call individual handler
 
     set_style (false);
 
@@ -589,25 +589,22 @@
   {
     // save state of this dock-widget
     QString name = objectName ();
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
 
-    if (! settings)
-      return;
+    gui_settings settings;
 
     store_geometry ();
 
     // conditional needed?
     if (! m_recent_float_geom.isNull ())
-      settings->setValue (dw_float_geometry.key.arg (name), m_recent_float_geom);
+      settings.setValue (dw_float_geometry.key.arg (name), m_recent_float_geom);
 
     if (! m_recent_dock_geom.isEmpty ())
-      settings->setValue (dw_dock_geometry.key.arg (name), m_recent_dock_geom);
-    settings->setValue (dw_is_visible.key.arg (name), isVisible ()); // store visibility
-    settings->setValue (dw_is_floating.key.arg (name), isFloating ()); // store floating
-    settings->setValue (dw_is_minimized.key.arg (name), isMinimized ()); // store minimized
+      settings.setValue (dw_dock_geometry.key.arg (name), m_recent_dock_geom);
+    settings.setValue (dw_is_visible.key.arg (name), isVisible ()); // store visibility
+    settings.setValue (dw_is_floating.key.arg (name), isFloating ()); // store floating
+    settings.setValue (dw_is_minimized.key.arg (name), isMinimized ()); // store minimized
 
-    settings->sync ();
+    settings.sync ();
   }
 
   bool octave_dock_widget::eventFilter (QObject *obj, QEvent *e)
--- a/libgui/src/octave-dock-widget.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/octave-dock-widget.h	Fri Dec 02 14:23:53 2022 -0500
@@ -31,7 +31,6 @@
 #include <QMouseEvent>
 #include <QToolButton>
 
-#include "gui-settings.h"
 #include "qt-interpreter-events.h"
 
 namespace octave
@@ -126,13 +125,13 @@
 
     virtual void handle_visibility (bool visible);
 
-    virtual void notice_settings (const gui_settings *) { }
+    virtual void notice_settings (void) { }
 
     virtual void save_settings (void);
 
     void init_window_menu_entry (void);
 
-    void handle_settings (const gui_settings *);
+    void handle_settings (void);
 
     void handle_active_dock_changed (octave_dock_widget *, octave_dock_widget *);
 
--- a/libgui/src/qt-interpreter-events.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/qt-interpreter-events.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -39,6 +39,7 @@
 
 #include "dialog.h"
 #include "gui-preferences-ed.h"
+#include "gui-settings.h"
 #include "octave-qobject.h"
 #include "qt-interpreter-events.h"
 #include "qt-utils.h"
@@ -323,10 +324,9 @@
 
   bool qt_interpreter_events::prompt_new_edit_file (const std::string& file)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
-    if (! settings || settings->value (ed_create_new_file).toBool ())
+    if (settings.value (ed_create_new_file).toBool ())
       return true;
 
     std::string abs_fname = sys::env::make_absolute (file);
@@ -684,10 +684,9 @@
   {
     QMutexLocker autolock (&m_mutex);
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
-    QString read_value = settings->value (key).toString ();
+    QString read_value = settings.value (key).toString ();
 
     // Some preferences need extra handling
     QString adjusted_value = gui_preference_adjust (key, value);
@@ -695,9 +694,9 @@
     if (! adjusted_value.isEmpty () && (read_value != adjusted_value))
       {
         // Change settings only for new, non-empty values
-        settings->setValue (key, QVariant (adjusted_value));
+        settings.setValue (key, QVariant (adjusted_value));
 
-        emit settings_changed (settings, true);   // true: changed by worker
+        emit settings_changed (true);   // true: changed by worker
       }
 
     m_result = read_value;
--- a/libgui/src/qt-interpreter-events.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/qt-interpreter-events.h	Fri Dec 02 14:23:53 2022 -0500
@@ -36,7 +36,6 @@
 #include <QWaitCondition>
 
 #include "dialog.h"
-#include "gui-settings.h"
 
 #include "event-manager.h"
 
@@ -303,7 +302,7 @@
 
     void get_named_icon_signal (const QString& name);
 
-    void settings_changed (const gui_settings *, bool);
+    void settings_changed (bool);
 
     void apply_new_settings (void);
 
--- a/libgui/src/release-notes.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/release-notes.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -40,6 +40,7 @@
 #include "gui-utils.h"
 #include "gui-preferences-dw.h"
 #include "gui-preferences-nr.h"
+#include "gui-settings.h"
 #include "news-reader.h"
 #include "octave-qobject.h"
 
@@ -51,11 +52,11 @@
     : QWidget (nullptr), m_browser (nullptr)
   {
 
-    resource_manager& rmgr = oct_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     // The icon
-    QString icon_set = settings->value (dw_icon_set).toString ();
+    QString icon_set = settings.value (dw_icon_set).toString ();
+
     if (icon_set != "NONE")
       m_release_notes_icon = dw_icon_set_names[icon_set]
                              + "ReleaseWidget.png";
--- a/libgui/src/resource-manager.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/resource-manager.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -64,17 +64,15 @@
 namespace octave
 {
   resource_manager::resource_manager (void)
-    : m_settings_directory (), m_settings_file (), m_settings (nullptr),
+    : m_settings_directory (), m_settings_file (),
       m_temporary_files (), m_icon_fallbacks ()
   {
     // Location, name, and format of settings file determined by
     // settings in qt_application class construtor.
 
-    m_settings = new gui_settings ();
-
     check_settings ();
 
-    m_settings_file = m_settings->fileName ();
+    m_settings_file = settings.fileName ();
 
     QFileInfo sfile (m_settings_file);
     m_settings_directory = sfile.absolutePath ();
@@ -82,8 +80,6 @@
 
   resource_manager::~resource_manager (void)
   {
-    delete m_settings;
-
     for (int i = m_temporary_files.count () - 1; i >=0; i--)
       remove_tmp_file (m_temporary_files.at (i));
   }
@@ -111,12 +107,11 @@
     // FIXME: can we somehow ensure that the settings object will always
     // be initialize and valid?
 
-    if (m_settings)
-      {
-        // get the locale from the settings if already available
-        language = m_settings->value (global_language.key,
-                                      global_language.def).toString ();
-      }
+    gui_settings settings;
+
+    // get the locale from the settings if already available
+    language = settings.value (global_language.key,
+                               global_language.def).toString ();
 
     // load the translations depending on the settings
     if (language == "SYSTEM")
@@ -151,24 +146,18 @@
 
     int theme = global_icon_theme_index.def.toInt ();
 
-    if (m_settings)
+    gui_settings settings;
+
+    // check for new and old setting and use old if required
+    if (! settings.contains (global_icon_theme_index.key))
       {
-       // check for new and old setting and use old if required
-       if (! m_settings->contains (global_icon_theme_index.key))
-         {
-           // new pref does not exist
-           if (m_settings->value (global_icon_theme).toBool ())
-             theme = ICON_THEME_SYSTEM;
-           else
-             theme = ICON_THEME_OCTAVE;
-           m_settings->setValue (global_icon_theme_index.key, theme);  // add new
-           m_settings->remove (global_icon_theme.key); // remove deprecated key
-         }
-       else
-         {
-           // get new settings
-           theme = m_settings->value (global_icon_theme_index).toInt ();
-         }
+        // new pref does not exist
+        if (settings.value (global_icon_theme).toBool ())
+          theme = ICON_THEME_SYSTEM;
+        else
+          theme = ICON_THEME_OCTAVE;
+        settings.setValue (global_icon_theme_index.key, theme);  // add new
+        settings.remove (global_icon_theme.key); // remove deprecated key
       }
 
    QIcon::setThemeName (global_all_icon_themes.at (theme));
@@ -191,24 +180,6 @@
     m_icon_fallbacks << global_icon_paths.at (ICON_THEME_CURSORS);
   }
 
-  gui_settings * resource_manager::get_settings (void) const
-  {
-    if (! m_settings)
-      {
-        QString msg (QT_TR_NOOP ("Octave has lost its settings.\n"
-                                 "This should not happen.\n\n"
-                                 "Please report this bug.\n\n"
-                                 "Octave GUI must be closed now."));
-
-        QMessageBox::critical (nullptr,
-                               QString (QT_TR_NOOP ("Octave Critical Error")),
-                               msg);
-        exit (1);
-      }
-
-    return m_settings;
-  }
-
   QString resource_manager::get_settings_directory (void)
   {
     return m_settings_directory;
@@ -317,24 +288,24 @@
 
     check_settings ();
 
+    gui_settings settings;
+
     // Write some settings that were dynamically determined at first startup
-    if (m_settings)
-      {
-        // Custom editor
-        if (! custom_editor.isEmpty ())
-          m_settings->setValue (global_custom_editor.key, custom_editor);
+
+    // Custom editor
+    if (! custom_editor.isEmpty ())
+      settings.setValue (global_custom_editor.key, custom_editor);
 
-        // Default monospace font for the terminal
-        if (def_font.count () > 1)
-          {
-            m_settings->setValue (cs_font.key, def_font[0]);
-            m_settings->setValue (cs_font_size.key, def_font[1].toInt ());
-          }
+    // Default monospace font for the terminal
+    if (def_font.count () > 1)
+      {
+        settings.setValue (cs_font.key, def_font[0]);
+        settings.setValue (cs_font_size.key, def_font[1].toInt ());
+      }
 
-        // Write the default monospace font into the settings for later use by
-        // console and editor as fallbacks of their font preferences.
-        m_settings->setValue (global_mono_font.key, get_default_font_family ());
-      }
+    // Write the default monospace font into the settings for later use by
+    // console and editor as fallbacks of their font preferences.
+    settings.setValue (global_mono_font.key, get_default_font_family ());
   }
 
 #if defined (HAVE_QSCINTILLA)
@@ -366,9 +337,10 @@
 
 #if defined (HAVE_QSCINTILLA)
   void resource_manager::read_lexer_settings (QsciLexer *lexer,
-                                              gui_settings *settings,
                                               int mode, int def)
   {
+    gui_settings settings;
+
     // Test whether the settings for lexer is already contained in the
     // given gui settings file. If yes, load them, if not copy them from the
     // default settings file.
@@ -380,13 +352,13 @@
 
     QString group ("Scintilla" + settings_color_modes_ext[m]);
 
-    settings->beginGroup (group);
-    settings->beginGroup (lexer->language ());
+    settings.beginGroup (group);
+    settings.beginGroup (lexer->language ());
 
-    QStringList lexer_keys = settings->allKeys ();
+    QStringList lexer_keys = settings.allKeys ();
 
-    settings->endGroup ();
-    settings->endGroup ();
+    settings.endGroup ();
+    settings.endGroup ();
 
     if (def == settings_reload_default_colors_flag || lexer_keys.count () == 0)
       {
@@ -408,9 +380,9 @@
 
         for (int i = 0; i < max_style; i++)
           {
-            c = settings->get_color_value (QVariant (lexer->color (styles[i])), m);
+            c = settings.get_color_value (QVariant (lexer->color (styles[i])), m);
             lexer->setColor (c, styles[i]);
-            p = settings->get_color_value (QVariant (lexer->paper (styles[i])), m);
+            p = settings.get_color_value (QVariant (lexer->paper (styles[i])), m);
             lexer->setPaper (p, styles[i]);
             dfa = copy_font_attributes (lexer->font (styles[i]), df);
             lexer->setFont (dfa, styles[i]);
@@ -423,31 +395,33 @@
         if (def != settings_reload_default_colors_flag)
           {
             const std::string group_str = group.toStdString ();
-            lexer->writeSettings (*settings, group_str.c_str ());
-            settings->sync ();
+            lexer->writeSettings (settings, group_str.c_str ());
+            settings.sync ();
           }
       }
     else
       {
         // Found lexer keys, read the settings
         const std::string group_str = group.toStdString ();
-        lexer->readSettings (*settings, group_str.c_str ());
+        lexer->readSettings (settings, group_str.c_str ());
       }
   }
 #endif
 
   void resource_manager::check_settings (void)
   {
-    if (m_settings->status () == QSettings::NoError)
+    gui_settings settings;
+
+    if (settings.status () == QSettings::NoError)
       {
         // Test usability (force file to be really created)
-        m_settings->setValue ("dummy", 0);
-        m_settings->sync ();
+        settings.setValue ("dummy", 0);
+        settings.sync ();
       }
 
-    if (! (QFile::exists (m_settings->fileName ())
-           && m_settings->isWritable ()
-           && m_settings->status () == QSettings::NoError))
+    if (! (QFile::exists (settings.fileName ())
+           && settings.isWritable ()
+           && settings.status () == QSettings::NoError))
       {
         QString msg
           = QString (QT_TR_NOOP ("The settings file\n%1\n"
@@ -462,17 +436,19 @@
         exit (1);
       }
     else
-      m_settings->remove ("dummy"); // Remove test entry
+      settings.remove ("dummy"); // Remove test entry
   }
 
   bool resource_manager::update_settings_key (const QString& old_key,
                                               const QString& new_key)
   {
-    if (m_settings->contains (old_key))
+    gui_settings settings;
+
+    if (settings.contains (old_key))
       {
-        QVariant preference = m_settings->value (old_key);
-        m_settings->setValue (new_key, preference);
-        m_settings->remove (old_key);
+        QVariant preference = settings.value (old_key);
+        settings.setValue (new_key, preference);
+        settings.remove (old_key);
         return true;
       }
 
@@ -486,9 +462,6 @@
 
   void resource_manager::update_network_settings (void)
   {
-    if (! m_settings)
-      return;
-
     QNetworkProxy proxy;
 
     // Assume no proxy and empty proxy data
@@ -500,11 +473,13 @@
     QString pass;
     QUrl proxy_url = QUrl ();
 
-    if (m_settings->value (global_use_proxy.key, global_use_proxy.def).toBool ())
+    gui_settings settings;
+
+    if (settings.value (global_use_proxy.key, global_use_proxy.def).toBool ())
       {
         // Use a proxy, collect all required information
         QString proxy_type_string
-          = m_settings->value (global_proxy_type.key, global_proxy_type.def).toString ();
+          = settings.value (global_proxy_type.key, global_proxy_type.def).toString ();
 
         // The proxy type for the Qt proxy settings
         if (proxy_type_string == "Socks5Proxy")
@@ -516,14 +491,14 @@
         if (proxy_type_string == "HttpProxy"
             || proxy_type_string == "Socks5Proxy")
           {
-            host = m_settings->value (global_proxy_host.key,
-                                      global_proxy_host.def).toString ();
-            port = m_settings->value (global_proxy_port.key,
-                                      global_proxy_port.def).toInt ();
-            user = m_settings->value (global_proxy_user.key,
-                                      global_proxy_user.def).toString ();
-            pass = m_settings->value (global_proxy_pass.key,
-                                      global_proxy_pass.def).toString ();
+            host = settings.value (global_proxy_host.key,
+                                   global_proxy_host.def).toString ();
+            port = settings.value (global_proxy_port.key,
+                                   global_proxy_port.def).toInt ();
+            user = settings.value (global_proxy_user.key,
+                                   global_proxy_user.def).toString ();
+            pass = settings.value (global_proxy_pass.key,
+                                   global_proxy_pass.def).toString ();
             if (proxy_type_string == "HttpProxy")
               scheme = "http";
             else if (proxy_type_string == "Socks5Proxy")
@@ -662,7 +637,9 @@
 
     if (enc.isEmpty ())
       {
-        enc = m_settings->value (ed_default_enc).toString ();
+        gui_settings settings;
+
+        enc = settings.value (ed_default_enc).toString ();
 
         if (enc.isEmpty ())  // still empty?
           {
--- a/libgui/src/resource-manager.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/resource-manager.h	Fri Dec 02 14:23:53 2022 -0500
@@ -35,8 +35,6 @@
 #include <QTranslator>
 #include <QTemporaryFile>
 
-#include "gui-settings.h"
-
 namespace octave
 {
   class resource_manager : public QObject
@@ -63,8 +61,6 @@
                              QTranslator *gui_tr);
     void config_icon_theme (void);
 
-    gui_settings * get_settings (void) const;
-
     QString get_settings_directory (void);
 
     QString get_settings_file (void);
@@ -83,8 +79,7 @@
 
 #if defined (HAVE_QSCINTILLA)
     int get_valid_lexer_styles (QsciLexer *lexer, int *styles);
-    void read_lexer_settings (QsciLexer *lexer, gui_settings *settings,
-                              int mode = 0, int def = 0);
+    void read_lexer_settings (QsciLexer *lexer, int mode = 0, int def = 0);
 #endif
 
     bool update_settings_key (const QString& new_key, const QString& old_key);
@@ -117,8 +112,6 @@
 
     QString m_settings_file;
 
-    gui_settings *m_settings;
-
     QList<QTemporaryFile *> m_temporary_files;
 
     QStringList m_icon_fallbacks;
--- a/libgui/src/set-path-dialog.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/set-path-dialog.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -50,6 +50,7 @@
 #include <QVBoxLayout>
 
 #include "gui-preferences-pd.h"
+#include "gui-settings.h"
 #include "octave-qobject.h"
 #include "octave-qtutils.h"
 #include "set-path-dialog.h"
@@ -168,10 +169,9 @@
 
     setLayout (main_layout);
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    restoreGeometry (
-      settings->value(pd_geometry.key).toByteArray());
+    gui_settings settings;
+
+    restoreGeometry (settings.value(pd_geometry.key).toByteArray());
   }
 
   void set_path_dialog::update_model (void)
@@ -297,11 +297,11 @@
     m_path_list->scrollTo (m->index (row_count - 1));
   }
 
-  void set_path_dialog::save_settings ()
+  void set_path_dialog::save_settings (void)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    settings->setValue (pd_geometry.key, saveGeometry ());
+    gui_settings settings;
+
+    settings.setValue (pd_geometry.key, saveGeometry ());
   }
 
   void set_path_dialog::closeEvent (QCloseEvent *e)
--- a/libgui/src/settings-dialog.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/settings-dialog.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -79,22 +79,12 @@
   {
     setupUi (this);
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-
-    if (! settings)
-      {
-        QMessageBox msgBox
-          (QMessageBox::Warning, tr ("Octave Preferences"),
-           tr ("Unable to save preferences.  Missing preferences file or unknown directory."));
-
-        msgBox.exec ();
-
-        return;
-      }
+    gui_settings settings;
 
     // look for available language files and the actual settings
+    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
     QString qm_dir_name = rmgr.get_gui_translation_dir ();
+
     QDir qm_dir (qm_dir_name);
     QFileInfoList qm_files = qm_dir.entryInfoList (QStringList ("*.qm"),
                              QDir::Files | QDir::Readable, QDir::Name);
@@ -104,7 +94,7 @@
     // System at beginning
     comboBox_language->insertItem (0, tr ("System setting"));
     comboBox_language->insertSeparator (1);    // separator after System
-    QString language = settings->value (global_language.key,
+    QString language = settings.value (global_language.key,
                                         global_language.def).toString ();
     if (language == global_language.def.toString ())
       language = tr ("System setting");
@@ -120,7 +110,7 @@
     combo_styles->addItems (styles);
     combo_styles->insertItem (0, global_style.def.toString ());
     combo_styles->insertSeparator (1);
-    QString current_style = settings->value (global_style).toString ();
+    QString current_style = settings.value (global_style).toString ();
     if (current_style == global_style.def.toString ())
       current_style = global_style.def.toString ();
     selected = combo_styles->findText (current_style);
@@ -134,12 +124,12 @@
     icon_size_group->addButton (icon_size_small);
     icon_size_group->addButton (icon_size_normal);
     icon_size_group->addButton (icon_size_large);
-    int icon_size = settings->value (global_icon_size).toInt ();
+    int icon_size = settings.value (global_icon_size).toInt ();
     icon_size_normal->setChecked (true);  // the default
     icon_size_small->setChecked (icon_size < 0);
     icon_size_large->setChecked (icon_size > 0);
     combo_box_icon_theme->addItems (global_all_icon_theme_names);
-    int theme = settings->value (global_icon_theme_index.key).toInt ();
+    int theme = settings.value (global_icon_theme_index.key).toInt ();
     combo_box_icon_theme->setCurrentIndex (theme);
 
     // which icon has to be selected
@@ -148,14 +138,14 @@
     icon_group->addButton (general_icon_graphic);
     icon_group->addButton (general_icon_letter);
     QString widget_icon_set =
-      settings->value (dw_icon_set).toString ();
+      settings.value (dw_icon_set).toString ();
     general_icon_octave->setChecked (true);  // the default (if invalid set)
     general_icon_octave->setChecked (widget_icon_set == "NONE");
     general_icon_graphic->setChecked (widget_icon_set == "GRAPHIC");
     general_icon_letter->setChecked (widget_icon_set == "LETTER");
 
     // custom title bar of dock widget
-    QColor bg_color = settings->value (dw_title_bg_color).value<QColor> ();
+    QColor bg_color = settings.value (dw_title_bg_color).value<QColor> ();
     m_widget_title_bg_color = new color_picker (bg_color);
     m_widget_title_bg_color->setEnabled (false);
     layout_widget_bgtitle->addWidget (m_widget_title_bg_color, 0);
@@ -163,7 +153,7 @@
     connect (cb_widget_custom_style, &QCheckBox::toggled,
              m_widget_title_bg_color, &color_picker::setEnabled);
 
-    QColor bg_color_active = settings->value (dw_title_bg_color_active).value<QColor> ();
+    QColor bg_color_active = settings.value (dw_title_bg_color_active).value<QColor> ();
     m_widget_title_bg_color_active = new color_picker (bg_color_active);
     m_widget_title_bg_color_active->setEnabled (false);
     layout_widget_bgtitle_active->addWidget (m_widget_title_bg_color_active, 0);
@@ -171,7 +161,7 @@
     connect (cb_widget_custom_style, &QCheckBox::toggled,
              m_widget_title_bg_color_active, &color_picker::setEnabled);
 
-    QColor fg_color = settings->value (dw_title_fg_color).value<QColor> ();
+    QColor fg_color = settings.value (dw_title_fg_color).value<QColor> ();
     m_widget_title_fg_color = new color_picker (fg_color);
     m_widget_title_fg_color->setEnabled (false);
     layout_widget_fgtitle->addWidget (m_widget_title_fg_color, 0);
@@ -179,7 +169,7 @@
     connect (cb_widget_custom_style, &QCheckBox::toggled,
              m_widget_title_fg_color, &color_picker::setEnabled);
 
-    QColor fg_color_active = settings->value (dw_title_fg_color_active).value<QColor> ();
+    QColor fg_color_active = settings.value (dw_title_fg_color_active).value<QColor> ();
     m_widget_title_fg_color_active = new color_picker (fg_color_active);
     m_widget_title_fg_color_active->setEnabled (false);
     layout_widget_fgtitle_active->addWidget (m_widget_title_fg_color_active, 0);
@@ -187,48 +177,48 @@
     connect (cb_widget_custom_style, &QCheckBox::toggled,
              m_widget_title_fg_color_active, &color_picker::setEnabled);
 
-    sb_3d_title->setValue (settings->value (dw_title_3d.key,
+    sb_3d_title->setValue (settings.value (dw_title_3d.key,
                                             dw_title_3d.def).toInt ());
-    cb_widget_custom_style->setChecked (settings->value (dw_title_custom_style).toBool ());
+    cb_widget_custom_style->setChecked (settings.value (dw_title_custom_style).toBool ());
 
     // Native file dialogs.
     // FIXME: This preference can be deprecated / removed if all display
     //       managers, especially KDE, run those dialogs without hangs or
     //       delays from the start (bug #54607).
-    cb_use_native_file_dialogs->setChecked (settings->value (global_use_native_dialogs).toBool ());
+    cb_use_native_file_dialogs->setChecked (settings.value (global_use_native_dialogs).toBool ());
 
     // Cursor blinking: consider old terminal related setting if not yet set
     // FIXME: This pref. can be deprecated / removed if Qt adds support for
     //       getting the cursor blink preferences from all OS environments
-    if (settings->contains (global_cursor_blinking.key))
+    if (settings.contains (global_cursor_blinking.key))
       {
         // Preference exists, read its value
-        cb_cursor_blinking->setChecked (settings->value
+        cb_cursor_blinking->setChecked (settings.value
             (global_cursor_blinking.key, global_cursor_blinking.def).toBool ());
       }
     else
       {
         // Pref. does not exist, so take old terminal related pref.
-        cb_cursor_blinking->setChecked (settings->value
+        cb_cursor_blinking->setChecked (settings.value
                     (cs_cursor_blinking.key, cs_cursor_blinking.def).toBool ());
       }
 
     // focus follows mouse
     cb_focus_follows_mouse->setChecked (
-      settings->value (dw_focus_follows_mouse).toBool ());
+      settings.value (dw_focus_follows_mouse).toBool ());
 
     // prompt on exit
     cb_prompt_to_exit->setChecked (
-      settings->value (global_prompt_to_exit.key, global_prompt_to_exit.def).toBool ());
+      settings.value (global_prompt_to_exit.key, global_prompt_to_exit.def).toBool ());
 
     // Main status bar
     cb_status_bar->setChecked (
-      settings->value (global_status_bar.key, global_status_bar.def).toBool ());
+      settings.value (global_status_bar.key, global_status_bar.def).toBool ());
 
     // Octave startup
     cb_restore_octave_dir->setChecked (
-      settings->value (global_restore_ov_dir.key, global_restore_ov_dir.def).toBool ());
-    le_octave_dir->setText (settings->value (global_ov_startup_dir.key,
+      settings.value (global_restore_ov_dir.key, global_restore_ov_dir.def).toBool ());
+    le_octave_dir->setText (settings.value (global_ov_startup_dir.key,
                                              global_ov_startup_dir.def).toString ());
 
     connect (pb_octave_dir, &QPushButton::pressed,
@@ -238,66 +228,66 @@
     // editor
     //
     useCustomFileEditor->setChecked (
-      settings->value (global_use_custom_editor.key, global_use_custom_editor.def).toBool ());
+      settings.value (global_use_custom_editor.key, global_use_custom_editor.def).toBool ());
     customFileEditor->setText (
-      settings->value (global_custom_editor.key, global_custom_editor.def).toString ());
-    editor_showLineNumbers->setChecked (settings->value (ed_show_line_numbers).toBool ());
-    editor_linenr_size->setValue (settings->value (ed_line_numbers_size).toInt ());
+      settings.value (global_custom_editor.key, global_custom_editor.def).toString ());
+    editor_showLineNumbers->setChecked (settings.value (ed_show_line_numbers).toBool ());
+    editor_linenr_size->setValue (settings.value (ed_line_numbers_size).toInt ());
 
     rmgr.combo_encoding (editor_combo_encoding);
 
-    editor_highlightCurrentLine->setChecked (settings->value (ed_highlight_current_line).toBool ());
-    editor_long_line_marker->setChecked (settings->value (ed_long_line_marker).toBool ());
+    editor_highlightCurrentLine->setChecked (settings.value (ed_highlight_current_line).toBool ());
+    editor_long_line_marker->setChecked (settings.value (ed_long_line_marker).toBool ());
     bool long_line =
-      settings->value (ed_long_line_marker_line).toBool ();
+      settings.value (ed_long_line_marker_line).toBool ();
     editor_long_line_marker_line->setChecked (long_line);
     bool long_back =
-      settings->value (ed_long_line_marker_background).toBool ();
+      settings.value (ed_long_line_marker_background).toBool ();
     editor_long_line_marker_background->setChecked (long_back);
     if (! (long_line || long_back))
       editor_long_line_marker_line->setChecked (true);
-    editor_long_line_column->setValue (settings->value (ed_long_line_column).toInt ());
-    editor_break_checkbox->setChecked (settings->value (ed_break_lines).toBool ());
-    editor_break_comments_checkbox->setChecked (settings->value (ed_break_lines_comments).toBool ());
-    editor_wrap_checkbox->setChecked (settings->value (ed_wrap_lines).toBool ());
-    cb_edit_status_bar->setChecked (settings->value (ed_show_edit_status_bar).toBool ());
-    cb_edit_tool_bar->setChecked (settings->value (ed_show_toolbar).toBool ());
-    cb_code_folding->setChecked (settings->value (ed_code_folding).toBool ());
-    editor_highlight_all_occurrences->setChecked (settings->value (ed_highlight_all_occurrences).toBool ());
+    editor_long_line_column->setValue (settings.value (ed_long_line_column).toInt ());
+    editor_break_checkbox->setChecked (settings.value (ed_break_lines).toBool ());
+    editor_break_comments_checkbox->setChecked (settings.value (ed_break_lines_comments).toBool ());
+    editor_wrap_checkbox->setChecked (settings.value (ed_wrap_lines).toBool ());
+    cb_edit_status_bar->setChecked (settings.value (ed_show_edit_status_bar).toBool ());
+    cb_edit_tool_bar->setChecked (settings.value (ed_show_toolbar).toBool ());
+    cb_code_folding->setChecked (settings.value (ed_code_folding).toBool ());
+    editor_highlight_all_occurrences->setChecked (settings.value (ed_highlight_all_occurrences).toBool ());
 
-    editor_auto_endif->setCurrentIndex (settings->value (ed_auto_endif).toInt () );
-    editor_codeCompletion->setChecked (settings->value (ed_code_completion).toBool ());
-    editor_spinbox_ac_threshold->setValue (settings->value (ed_code_completion_threshold).toInt ());
-    editor_checkbox_ac_keywords->setChecked (settings->value (ed_code_completion_keywords).toBool ());
+    editor_auto_endif->setCurrentIndex (settings.value (ed_auto_endif).toInt () );
+    editor_codeCompletion->setChecked (settings.value (ed_code_completion).toBool ());
+    editor_spinbox_ac_threshold->setValue (settings.value (ed_code_completion_threshold).toInt ());
+    editor_checkbox_ac_keywords->setChecked (settings.value (ed_code_completion_keywords).toBool ());
     editor_checkbox_ac_builtins->setEnabled (editor_checkbox_ac_keywords->isChecked ());
     editor_checkbox_ac_functions->setEnabled (editor_checkbox_ac_keywords->isChecked ());
-    editor_checkbox_ac_builtins->setChecked (settings->value (ed_code_completion_octave_builtins).toBool ());
-    editor_checkbox_ac_functions->setChecked (settings->value (ed_code_completion_octave_functions).toBool ());
-    editor_checkbox_ac_document->setChecked (settings->value (ed_code_completion_document).toBool ());
-    editor_checkbox_ac_case->setChecked (settings->value (ed_code_completion_case).toBool ());
-    editor_checkbox_ac_replace->setChecked (settings->value (ed_code_completion_replace).toBool ());
-    editor_ws_checkbox->setChecked (settings->value (ed_show_white_space).toBool ());
-    editor_ws_indent_checkbox->setChecked (settings->value (ed_show_white_space_indent).toBool ());
-    cb_show_eol->setChecked (settings->value (ed_show_eol_chars).toBool ());
-    cb_show_hscrollbar->setChecked (settings->value (ed_show_hscroll_bar).toBool ());
+    editor_checkbox_ac_builtins->setChecked (settings.value (ed_code_completion_octave_builtins).toBool ());
+    editor_checkbox_ac_functions->setChecked (settings.value (ed_code_completion_octave_functions).toBool ());
+    editor_checkbox_ac_document->setChecked (settings.value (ed_code_completion_document).toBool ());
+    editor_checkbox_ac_case->setChecked (settings.value (ed_code_completion_case).toBool ());
+    editor_checkbox_ac_replace->setChecked (settings.value (ed_code_completion_replace).toBool ());
+    editor_ws_checkbox->setChecked (settings.value (ed_show_white_space).toBool ());
+    editor_ws_indent_checkbox->setChecked (settings.value (ed_show_white_space_indent).toBool ());
+    cb_show_eol->setChecked (settings.value (ed_show_eol_chars).toBool ());
+    cb_show_hscrollbar->setChecked (settings.value (ed_show_hscroll_bar).toBool ());
 
     for (int i = 0; i < ed_tab_position_names.length (); i++)
       editor_combox_tab_pos->insertItem (i,
               tr (ed_tab_position_names.at (i).toStdString ().data ()));
     editor_combox_tab_pos->setCurrentIndex
-      (settings->value (ed_tab_position).toInt ());
+      (settings.value (ed_tab_position).toInt ());
 
-    editor_cb_tabs_rotated->setChecked (settings->value (ed_tabs_rotated).toBool ());
-    editor_sb_tabs_max_width->setValue (settings->value (ed_tabs_max_width).toInt ());
+    editor_cb_tabs_rotated->setChecked (settings.value (ed_tabs_rotated).toBool ());
+    editor_sb_tabs_max_width->setValue (settings.value (ed_tabs_max_width).toInt ());
 
     int selected_comment_string, selected_uncomment_string;
 
-    if (settings->contains (ed_comment_str.key))   // new version (radio buttons)
-      selected_comment_string = settings->value (ed_comment_str).toInt ();
+    if (settings.contains (ed_comment_str.key))   // new version (radio buttons)
+      selected_comment_string = settings.value (ed_comment_str).toInt ();
     else                                         // old version (combo box)
-      selected_comment_string = settings->value (ed_comment_str_old.key,                                                 ed_comment_str.def).toInt ();
+      selected_comment_string = settings.value (ed_comment_str_old.key,                                                 ed_comment_str.def).toInt ();
 
-    selected_uncomment_string = settings->value (ed_uncomment_str).toInt ();
+    selected_uncomment_string = settings.value (ed_uncomment_str).toInt ();
 
     for (int i = 0; i < ed_comment_strings_count; i++)
       {
@@ -320,33 +310,33 @@
       }
 
 
-    combo_eol_mode->setCurrentIndex (settings->value (ed_default_eol_mode).toInt ());
-    editor_auto_ind_checkbox->setChecked (settings->value (ed_auto_indent).toBool ());
-    editor_tab_ind_checkbox->setChecked (settings->value (ed_tab_indents_line).toBool ());
-    editor_bs_unind_checkbox->setChecked (settings->value (ed_backspace_unindents_line).toBool ());
-    editor_ind_guides_checkbox->setChecked (settings->value (ed_show_indent_guides).toBool ());
-    editor_ind_width_spinbox->setValue (settings->value (ed_indent_width).toInt ());
-    editor_ind_uses_tabs_checkbox->setChecked (settings->value (ed_indent_uses_tabs).toBool ());
-    editor_tab_width_spinbox->setValue (settings->value (ed_tab_width).toInt ());
-    editor_restoreSession->setChecked (settings->value (ed_restore_session).toBool ());
-    editor_create_new_file->setChecked (settings->value (ed_create_new_file).toBool ());
-    editor_reload_changed_files->setChecked (settings->value (ed_always_reload_changed_files).toBool ());
-    editor_force_newline->setChecked (settings->value (ed_force_newline).toBool ());
-    editor_remove_trailing_spaces->setChecked (settings->value (ed_rm_trailing_spaces).toBool ());
-    editor_hiding_closes_files->setChecked (settings->value (ed_hiding_closes_files).toBool ());
-    editor_show_dbg_file->setChecked (settings->value (ed_show_dbg_file).toBool ());
+    combo_eol_mode->setCurrentIndex (settings.value (ed_default_eol_mode).toInt ());
+    editor_auto_ind_checkbox->setChecked (settings.value (ed_auto_indent).toBool ());
+    editor_tab_ind_checkbox->setChecked (settings.value (ed_tab_indents_line).toBool ());
+    editor_bs_unind_checkbox->setChecked (settings.value (ed_backspace_unindents_line).toBool ());
+    editor_ind_guides_checkbox->setChecked (settings.value (ed_show_indent_guides).toBool ());
+    editor_ind_width_spinbox->setValue (settings.value (ed_indent_width).toInt ());
+    editor_ind_uses_tabs_checkbox->setChecked (settings.value (ed_indent_uses_tabs).toBool ());
+    editor_tab_width_spinbox->setValue (settings.value (ed_tab_width).toInt ());
+    editor_restoreSession->setChecked (settings.value (ed_restore_session).toBool ());
+    editor_create_new_file->setChecked (settings.value (ed_create_new_file).toBool ());
+    editor_reload_changed_files->setChecked (settings.value (ed_always_reload_changed_files).toBool ());
+    editor_force_newline->setChecked (settings.value (ed_force_newline).toBool ());
+    editor_remove_trailing_spaces->setChecked (settings.value (ed_rm_trailing_spaces).toBool ());
+    editor_hiding_closes_files->setChecked (settings.value (ed_hiding_closes_files).toBool ());
+    editor_show_dbg_file->setChecked (settings.value (ed_show_dbg_file).toBool ());
 
     // terminal
-    QString default_font = settings->value (global_mono_font).toString ();
-    terminal_fontName->setCurrentFont (QFont (settings->value (cs_font.key, default_font).toString ()));
-    terminal_fontSize->setValue (settings->value (cs_font_size).toInt ());
-    terminal_history_buffer->setValue (settings->value (cs_hist_buffer).toInt ());
-    terminal_cursorUseForegroundColor->setChecked (settings->value (cs_cursor_use_fgcol).toBool ());
-    terminal_focus_command->setChecked (settings->value (cs_focus_cmd).toBool ());
-    terminal_print_dbg_location->setChecked (settings->value (cs_dbg_location).toBool ());
+    QString default_font = settings.value (global_mono_font).toString ();
+    terminal_fontName->setCurrentFont (QFont (settings.value (cs_font.key, default_font).toString ()));
+    terminal_fontSize->setValue (settings.value (cs_font_size).toInt ());
+    terminal_history_buffer->setValue (settings.value (cs_hist_buffer).toInt ());
+    terminal_cursorUseForegroundColor->setChecked (settings.value (cs_cursor_use_fgcol).toBool ());
+    terminal_focus_command->setChecked (settings.value (cs_focus_cmd).toBool ());
+    terminal_print_dbg_location->setChecked (settings.value (cs_dbg_location).toBool ());
 
     QString cursor_type
-      = settings->value (cs_cursor).toString ();
+      = settings.value (cs_cursor).toString ();
 
     QStringList items;
     items << QString ("0") << QString ("1") << QString ("2");
@@ -364,28 +354,28 @@
           }
       }
 
-    read_terminal_colors (settings);
+    read_terminal_colors ();
 
     // file browser
     connect (sync_octave_directory, &QCheckBox::toggled,
              this, &settings_dialog::set_disabled_pref_file_browser_dir);
 
-    sync_octave_directory->setChecked (settings->value (fb_sync_octdir).toBool ());
-    cb_restore_file_browser_dir->setChecked (settings->value (fb_restore_last_dir).toBool ());
-    le_file_browser_dir->setText (settings->value (fb_startup_dir.key).toString ());
+    sync_octave_directory->setChecked (settings.value (fb_sync_octdir).toBool ());
+    cb_restore_file_browser_dir->setChecked (settings.value (fb_restore_last_dir).toBool ());
+    le_file_browser_dir->setText (settings.value (fb_startup_dir.key).toString ());
 
     connect (pb_file_browser_dir, &QPushButton::pressed,
              this, &settings_dialog::get_file_browser_dir);
 
-    le_file_browser_extensions->setText (settings->value (fb_txt_file_ext).toString ());
+    le_file_browser_extensions->setText (settings.value (fb_txt_file_ext).toString ());
 
-    checkbox_allow_web_connect->setChecked (settings->value (nr_allow_connection).toBool ());
+    checkbox_allow_web_connect->setChecked (settings.value (nr_allow_connection).toBool ());
 
     // Proxy
-    bool use_proxy = settings->value (global_use_proxy.key, global_use_proxy.def).toBool ();
+    bool use_proxy = settings.value (global_use_proxy.key, global_use_proxy.def).toBool ();
     use_proxy_server->setChecked (use_proxy);
     // Fill combo box and activate current one
-    QString proxy_type_string = settings->value (global_proxy_type.key, global_proxy_type.def).toString ();
+    QString proxy_type_string = settings.value (global_proxy_type.key, global_proxy_type.def).toString ();
     proxy_type->addItems (global_proxy_all_types);
     for (int i = 0; i < global_proxy_all_types.length (); i++)
       {
@@ -396,10 +386,10 @@
           }
       }
     // Fill all line edits
-    proxy_host_name->setText (settings->value (global_proxy_host.key, global_proxy_host.def).toString ());
-    proxy_port->setText (settings->value (global_proxy_port.key, global_proxy_port.def).toString ());
-    proxy_username->setText (settings->value (global_proxy_user.key, global_proxy_user.def).toString ());
-    proxy_password->setText (settings->value (global_proxy_pass.key, global_proxy_pass.def).toString ());
+    proxy_host_name->setText (settings.value (global_proxy_host.key, global_proxy_host.def).toString ());
+    proxy_port->setText (settings.value (global_proxy_port.key, global_proxy_port.def).toString ());
+    proxy_username->setText (settings.value (global_proxy_user.key, global_proxy_user.def).toString ());
+    proxy_password->setText (settings.value (global_proxy_pass.key, global_proxy_pass.def).toString ());
     // Connect relevant signals for dis-/enabling some elements
     connect (proxy_type, QOverload<int>::of (&QComboBox::currentIndexChanged),
              this, &settings_dialog::proxy_items_update);
@@ -409,37 +399,37 @@
     proxy_items_update ();
 
     // Workspace
-    read_workspace_colors (settings);
+    read_workspace_colors ();
 
     // variable editor
-    varedit_columnWidth->setValue (settings->value (ve_column_width).toInt ());
-    varedit_rowHeight->setValue (settings->value (ve_row_height).toInt ());
+    varedit_columnWidth->setValue (settings.value (ve_column_width).toInt ());
+    varedit_rowHeight->setValue (settings.value (ve_row_height).toInt ());
 
-    varedit_font->setCurrentFont (QFont (settings->value (ve_font_name.key,
-                                                          settings->value (cs_font.key, default_font)).toString ()));
-    varedit_fontSize->setValue (settings->value (ve_font_size).toInt ());
+    varedit_font->setCurrentFont (QFont (settings.value (ve_font_name.key,
+                                                          settings.value (cs_font.key, default_font)).toString ()));
+    varedit_fontSize->setValue (settings.value (ve_font_size).toInt ());
     connect (varedit_useTerminalFont, &QCheckBox::toggled,
              varedit_font, &QFontComboBox::setDisabled);
     connect (varedit_useTerminalFont, &QCheckBox::toggled,
              varedit_fontSize, &QSpinBox::setDisabled);
-    varedit_useTerminalFont->setChecked (settings->value (ve_use_terminal_font).toBool ());
+    varedit_useTerminalFont->setChecked (settings.value (ve_use_terminal_font).toBool ());
     varedit_font->setDisabled (varedit_useTerminalFont->isChecked ());
     varedit_fontSize->setDisabled (varedit_useTerminalFont->isChecked ());
 
-    varedit_alternate->setChecked (settings->value (ve_alternate_rows).toBool ());
+    varedit_alternate->setChecked (settings.value (ve_alternate_rows).toBool ());
 
     // variable editor colors
-    read_varedit_colors (settings);
+    read_varedit_colors ();
 
     // shortcuts
 
     shortcut_manager& scmgr = m_octave_qobj.get_shortcut_manager ();
 
     cb_prevent_readline_conflicts->setChecked (
-          settings->value (sc_prevent_rl_conflicts.key,
+          settings.value (sc_prevent_rl_conflicts.key,
                            sc_prevent_rl_conflicts.def).toBool ());
     cb_prevent_readline_conflicts_menu->setChecked (
-          settings->value (sc_prevent_rl_conflicts_menu.key,
+          settings.value (sc_prevent_rl_conflicts_menu.key,
                            sc_prevent_rl_conflicts_menu.def).toBool ());
 
     // initialize the tree view with all shortcut data
@@ -457,7 +447,7 @@
 
 #if defined (HAVE_QSCINTILLA)
 
-    int mode = settings->value (ed_color_mode).toInt ();
+    int mode = settings.value (ed_color_mode).toInt ();
 
     QCheckBox *cb_color_mode = new QCheckBox (tr (settings_color_modes.toStdString ().data ()),
                                               group_box_editor_styles);
@@ -469,7 +459,7 @@
     pb_reload_default_colors->setToolTip (tr (settings_reload_styles_tooltip.toStdString ().data ()));
 
     color_picker *current_line_color = new color_picker (
-      settings->value (ed_highlight_current_line_color.key +
+      settings.value (ed_highlight_current_line_color.key +
                        settings_color_modes_ext[mode],
                        ed_highlight_current_line_color.def).value<QColor> (), this);
     current_line_color->setObjectName (ed_highlight_current_line_color.key);
@@ -509,8 +499,8 @@
              this, &settings_dialog::button_clicked);
 
     // restore last geometry
-    if (settings->contains (sd_geometry.key))
-      restoreGeometry (settings->value (sd_geometry).toByteArray ());
+    if (settings.contains (sd_geometry.key))
+      restoreGeometry (settings.value (sd_geometry).toByteArray ());
     else
       setGeometry (QRect (10, 50, 1000, 600));
   }
@@ -519,10 +509,9 @@
   {
     if (tab.isEmpty ())
       {
-        resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-        gui_settings *settings = rmgr.get_settings ();
-        if (settings)
-          tabWidget->setCurrentIndex (settings->value (sd_last_tab).toInt ());
+        gui_settings settings;
+
+        tabWidget->setCurrentIndex (settings.value (sd_last_tab).toInt ());
       }
     else
       {
@@ -549,9 +538,10 @@
   {
     // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
     int opts = QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks;
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    if (! settings->value (global_use_native_dialogs).toBool ())
+
+    gui_settings settings;
+
+    if (! settings.value (global_use_native_dialogs).toBool ())
       opts |= QFileDialog::DontUseNativeDialog;
 
     QString dir = QFileDialog::getExistingDirectory
@@ -575,12 +565,12 @@
         || button_role == QDialogButtonBox::AcceptRole)
       {
         // save last settings dialog's geometry and close
-        resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-        gui_settings *settings = rmgr.get_settings ();
+
+        gui_settings settings;
 
-        settings->setValue (sd_last_tab.key, tabWidget->currentIndex ());
-        settings->setValue (sd_geometry.key, saveGeometry ());
-        settings->sync ();
+        settings.setValue (sd_last_tab.key, tabWidget->currentIndex ());
+        settings.setValue (sd_geometry.key, saveGeometry ());
+        settings.sync ();
 
         close ();
       }
@@ -655,8 +645,7 @@
   {
 #if defined (HAVE_QSCINTILLA)
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     QCheckBox *cb_color_mode
       = group_box_editor_styles->findChild <QCheckBox *> (ed_color_mode.key);
@@ -671,12 +660,12 @@
         if (def != settings_reload_default_colors_flag)
           {
             // Get current value from settings or the default
-            c_picker->set_color (settings->color_value (ed_highlight_current_line_color, m));
+            c_picker->set_color (settings.color_value (ed_highlight_current_line_color, m));
           }
         else
           {
             // Get the default value
-            c_picker->set_color (settings->get_color_value (ed_highlight_current_line_color.def, m));
+            c_picker->set_color (settings.get_color_value (ed_highlight_current_line_color.def, m));
           }
       }
 
@@ -686,40 +675,40 @@
 
 #  if defined (HAVE_LEXER_OCTAVE)
     lexer = new QsciLexerOctave ();
-    update_lexer (lexer, settings, m, def);
+    update_lexer (lexer, m, def);
     delete lexer;
 #  elif defined (HAVE_LEXER_MATLAB)
     lexer = new QsciLexerMatlab ();
-    update_lexer (lexer, settings, m, def);
+    update_lexer (lexer, m, def);
     delete lexer;
 #  endif
 
     lexer = new QsciLexerCPP ();
-    update_lexer (lexer, settings, m, def);
+    update_lexer (lexer, m, def);
     delete lexer;
 
     lexer = new QsciLexerJava ();
-    update_lexer (lexer, settings, m, def);
+    update_lexer (lexer, m, def);
     delete lexer;
 
     lexer = new QsciLexerPerl ();
-    update_lexer (lexer, settings, m, def);
+    update_lexer (lexer, m, def);
     delete lexer;
 
     lexer = new QsciLexerBatch ();
-    update_lexer (lexer, settings, m, def);
+    update_lexer (lexer, m, def);
     delete lexer;
 
     lexer = new QsciLexerDiff ();
-    update_lexer (lexer, settings, m, def);
+    update_lexer (lexer, m, def);
     delete lexer;
 
     lexer = new QsciLexerBash ();
-    update_lexer (lexer, settings, m, def);
+    update_lexer (lexer, m, def);
     delete lexer;
 
     lexer = new octave_txt_lexer ();
-    update_lexer (lexer, settings, m, def);
+    update_lexer (lexer, m, def);
     delete lexer;
 
 #else
@@ -731,13 +720,12 @@
 
 #if defined (HAVE_QSCINTILLA)
 
-  void settings_dialog::update_lexer (QsciLexer *lexer, gui_settings *settings,
-                                      int mode, int def)
+  void settings_dialog::update_lexer (QsciLexer *lexer, int mode, int def)
   {
     // Get lexer settings and copy from default settings if not yet
     // available in normal settings file
     resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    rmgr.read_lexer_settings (lexer, settings, mode, def);
+    rmgr.read_lexer_settings (lexer, mode, def);
 
     // When reloading default styles, the style tabs do already exists.
     // Otherwise, check if they exist or not.
@@ -757,7 +745,7 @@
       {
         // This is not an update, call get_lexer_settings for building
         // the settings tab
-        get_lexer_settings (lexer, settings);
+        get_lexer_settings (lexer);
         return;
       }
 
@@ -834,8 +822,7 @@
 
   }
 
-  void settings_dialog::get_lexer_settings (QsciLexer *lexer,
-                                            gui_settings *settings)
+  void settings_dialog::get_lexer_settings (QsciLexer *lexer)
   {
     resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
 
@@ -925,13 +912,14 @@
     scroll_area->setWidget (scroll_area_contents);
     tabs_editor_lexers->addTab (scroll_area, lexer->language ());
 
-    tabs_editor_lexers->setCurrentIndex (settings->value (sd_last_editor_styles_tab).toInt ());
+    gui_settings settings;
+
+    tabs_editor_lexers->setCurrentIndex (settings.value (sd_last_editor_styles_tab).toInt ());
   }
 
-  void settings_dialog::write_lexer_settings (QsciLexer *lexer,
-                                              gui_settings *settings)
+  void settings_dialog::write_lexer_settings (QsciLexer *lexer)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
+    gui_settings settings;
 
     QCheckBox *cb_color_mode
       = group_box_editor_styles->findChild <QCheckBox *> (ed_color_mode.key);
@@ -939,13 +927,16 @@
     if (cb_color_mode && cb_color_mode->isChecked ())
       mode = 1;
 
-    settings->setValue (ed_color_mode.key, mode);
+    settings.setValue (ed_color_mode.key, mode);
 
     QWidget *tab = tabs_editor_lexers->
       findChild <QWidget *> (QString (lexer->language ()) + "_styles");
     int styles[ed_max_lexer_styles];  // array for saving valid styles
     // (enum is not continuous)
+
+    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
     int max_style = rmgr.get_valid_lexer_styles (lexer, styles);
+
     QFontComboBox *select_font;
     QSpinBox *font_size;
     QCheckBox *attrib_font[3];
@@ -955,11 +946,11 @@
 
     color = findChild <color_picker *> (ed_highlight_current_line_color.key);
     if (color)
-      settings->setValue (ed_highlight_current_line_color.key
+      settings.setValue (ed_highlight_current_line_color.key
                           + settings_color_modes_ext[mode], color->color ());
 
     QString default_font_name
-      = settings->value (global_mono_font).toString ();
+      = settings.value (global_mono_font).toString ();
     QFont default_font = QFont (default_font_name, 10, -1, 0);
     QColor default_color = QColor ();
 
@@ -1024,19 +1015,18 @@
     const std::string group =
       QString ("Scintilla" + settings_color_modes_ext[mode]).toStdString ();
 
-    lexer->writeSettings (*settings, group.c_str ());
+    lexer->writeSettings (settings, group.c_str ());
 
-    settings->setValue (sd_last_editor_styles_tab.key,
-                        tabs_editor_lexers->currentIndex ());
-    settings->sync ();
+    settings.setValue (sd_last_editor_styles_tab.key,
+                       tabs_editor_lexers->currentIndex ());
+    settings.sync ();
   }
 
 #endif
 
   void settings_dialog::write_changed_settings (bool closing)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     // the icon set
     QString widget_icon_set = "NONE";
@@ -1044,87 +1034,87 @@
       widget_icon_set = "LETTER";
     else if (general_icon_graphic->isChecked ())
       widget_icon_set = "GRAPHIC";
-    settings->setValue (dw_icon_set.key, widget_icon_set);
+    settings.setValue (dw_icon_set.key, widget_icon_set);
 
     // language
     QString language = comboBox_language->currentText ();
     if (language == tr ("System setting"))
       language = global_language.def.toString ();
-    settings->setValue (global_language.key, language);
+    settings.setValue (global_language.key, language);
 
     // style
     QString selected_style = combo_styles->currentText ();
     if (selected_style == global_style.def.toString ())
       selected_style = global_style.def.toString ();
-    settings->setValue (global_style.key, selected_style);
+    settings.setValue (global_style.key, selected_style);
 
     // dock widget title bar
-    settings->setValue (dw_title_custom_style.key, cb_widget_custom_style->isChecked ());
-    settings->setValue (dw_title_3d.key, sb_3d_title->value ());
-    settings->setValue (dw_title_bg_color.key, m_widget_title_bg_color->color ());
-    settings->setValue (dw_title_bg_color_active.key, m_widget_title_bg_color_active->color ());
-    settings->setValue (dw_title_fg_color.key, m_widget_title_fg_color->color ());
-    settings->setValue (dw_title_fg_color_active.key, m_widget_title_fg_color_active->color ());
+    settings.setValue (dw_title_custom_style.key, cb_widget_custom_style->isChecked ());
+    settings.setValue (dw_title_3d.key, sb_3d_title->value ());
+    settings.setValue (dw_title_bg_color.key, m_widget_title_bg_color->color ());
+    settings.setValue (dw_title_bg_color_active.key, m_widget_title_bg_color_active->color ());
+    settings.setValue (dw_title_fg_color.key, m_widget_title_fg_color->color ());
+    settings.setValue (dw_title_fg_color_active.key, m_widget_title_fg_color_active->color ());
 
     // icon size and theme
     int icon_size = icon_size_large->isChecked () - icon_size_small->isChecked ();
-    settings->setValue (global_icon_size.key, icon_size);
-    settings->setValue (global_icon_theme_index.key, combo_box_icon_theme->currentIndex ());
+    settings.setValue (global_icon_size.key, icon_size);
+    settings.setValue (global_icon_theme_index.key, combo_box_icon_theme->currentIndex ());
 
     // native file dialogs
-    settings->setValue (global_use_native_dialogs.key, cb_use_native_file_dialogs->isChecked ());
+    settings.setValue (global_use_native_dialogs.key, cb_use_native_file_dialogs->isChecked ());
 
     // cursor blinking
-    settings->setValue (global_cursor_blinking.key, cb_cursor_blinking->isChecked ());
+    settings.setValue (global_cursor_blinking.key, cb_cursor_blinking->isChecked ());
 
     // focus follows mouse
-    settings->setValue (dw_focus_follows_mouse.key, cb_focus_follows_mouse->isChecked ());
+    settings.setValue (dw_focus_follows_mouse.key, cb_focus_follows_mouse->isChecked ());
 
     // promp to exit
-    settings->setValue (global_prompt_to_exit.key, cb_prompt_to_exit->isChecked ());
+    settings.setValue (global_prompt_to_exit.key, cb_prompt_to_exit->isChecked ());
 
     // status bar
-    settings->setValue (global_status_bar.key, cb_status_bar->isChecked ());
+    settings.setValue (global_status_bar.key, cb_status_bar->isChecked ());
 
     // Octave startup
-    settings->setValue (global_restore_ov_dir.key, cb_restore_octave_dir->isChecked ());
-    settings->setValue (global_ov_startup_dir.key, le_octave_dir->text ());
+    settings.setValue (global_restore_ov_dir.key, cb_restore_octave_dir->isChecked ());
+    settings.setValue (global_ov_startup_dir.key, le_octave_dir->text ());
 
     //editor
-    settings->setValue (global_use_custom_editor.key, useCustomFileEditor->isChecked ());
-    settings->setValue (global_custom_editor.key, customFileEditor->text ());
-    settings->setValue (ed_show_line_numbers.key, editor_showLineNumbers->isChecked ());
-    settings->setValue (ed_line_numbers_size.key, editor_linenr_size->value ());
-    settings->setValue (ed_highlight_current_line.key, editor_highlightCurrentLine->isChecked ());
-    settings->setValue (ed_long_line_marker.key, editor_long_line_marker->isChecked ());
-    settings->setValue (ed_long_line_marker_line.key, editor_long_line_marker_line->isChecked ());
-    settings->setValue (ed_long_line_marker_background.key, editor_long_line_marker_background->isChecked ());
-    settings->setValue (ed_long_line_column.key, editor_long_line_column->value ());
-    settings->setValue (ed_break_lines.key, editor_break_checkbox->isChecked ());
-    settings->setValue (ed_break_lines_comments.key, editor_break_comments_checkbox->isChecked ());
-    settings->setValue (ed_wrap_lines.key, editor_wrap_checkbox->isChecked ());
-    settings->setValue (ed_code_folding.key, cb_code_folding->isChecked ());
-    settings->setValue (ed_show_edit_status_bar.key, cb_edit_status_bar->isChecked ());
-    settings->setValue (ed_show_toolbar.key, cb_edit_tool_bar->isChecked ());
-    settings->setValue (ed_highlight_all_occurrences.key, editor_highlight_all_occurrences->isChecked ());
-    settings->setValue (ed_code_completion.key, editor_codeCompletion->isChecked ());
-    settings->setValue (ed_code_completion_threshold.key, editor_spinbox_ac_threshold->value ());
-    settings->setValue (ed_code_completion_keywords.key, editor_checkbox_ac_keywords->isChecked ());
-    settings->setValue (ed_code_completion_octave_builtins.key, editor_checkbox_ac_builtins->isChecked ());
-    settings->setValue (ed_code_completion_octave_functions.key, editor_checkbox_ac_functions->isChecked ());
-    settings->setValue (ed_code_completion_document.key, editor_checkbox_ac_document->isChecked ());
-    settings->setValue (ed_code_completion_case.key, editor_checkbox_ac_case->isChecked ());
-    settings->setValue (ed_code_completion_replace.key, editor_checkbox_ac_replace->isChecked ());
-    settings->setValue (ed_auto_endif.key, editor_auto_endif->currentIndex ());
-    settings->setValue (ed_show_white_space.key, editor_ws_checkbox->isChecked ());
-    settings->setValue (ed_show_white_space_indent.key, editor_ws_indent_checkbox->isChecked ());
-    settings->setValue (ed_show_eol_chars.key, cb_show_eol->isChecked ());
-    settings->setValue (ed_show_hscroll_bar.key, cb_show_hscrollbar->isChecked ());
-    settings->setValue (ed_default_eol_mode.key, combo_eol_mode->currentIndex ());
+    settings.setValue (global_use_custom_editor.key, useCustomFileEditor->isChecked ());
+    settings.setValue (global_custom_editor.key, customFileEditor->text ());
+    settings.setValue (ed_show_line_numbers.key, editor_showLineNumbers->isChecked ());
+    settings.setValue (ed_line_numbers_size.key, editor_linenr_size->value ());
+    settings.setValue (ed_highlight_current_line.key, editor_highlightCurrentLine->isChecked ());
+    settings.setValue (ed_long_line_marker.key, editor_long_line_marker->isChecked ());
+    settings.setValue (ed_long_line_marker_line.key, editor_long_line_marker_line->isChecked ());
+    settings.setValue (ed_long_line_marker_background.key, editor_long_line_marker_background->isChecked ());
+    settings.setValue (ed_long_line_column.key, editor_long_line_column->value ());
+    settings.setValue (ed_break_lines.key, editor_break_checkbox->isChecked ());
+    settings.setValue (ed_break_lines_comments.key, editor_break_comments_checkbox->isChecked ());
+    settings.setValue (ed_wrap_lines.key, editor_wrap_checkbox->isChecked ());
+    settings.setValue (ed_code_folding.key, cb_code_folding->isChecked ());
+    settings.setValue (ed_show_edit_status_bar.key, cb_edit_status_bar->isChecked ());
+    settings.setValue (ed_show_toolbar.key, cb_edit_tool_bar->isChecked ());
+    settings.setValue (ed_highlight_all_occurrences.key, editor_highlight_all_occurrences->isChecked ());
+    settings.setValue (ed_code_completion.key, editor_codeCompletion->isChecked ());
+    settings.setValue (ed_code_completion_threshold.key, editor_spinbox_ac_threshold->value ());
+    settings.setValue (ed_code_completion_keywords.key, editor_checkbox_ac_keywords->isChecked ());
+    settings.setValue (ed_code_completion_octave_builtins.key, editor_checkbox_ac_builtins->isChecked ());
+    settings.setValue (ed_code_completion_octave_functions.key, editor_checkbox_ac_functions->isChecked ());
+    settings.setValue (ed_code_completion_document.key, editor_checkbox_ac_document->isChecked ());
+    settings.setValue (ed_code_completion_case.key, editor_checkbox_ac_case->isChecked ());
+    settings.setValue (ed_code_completion_replace.key, editor_checkbox_ac_replace->isChecked ());
+    settings.setValue (ed_auto_endif.key, editor_auto_endif->currentIndex ());
+    settings.setValue (ed_show_white_space.key, editor_ws_checkbox->isChecked ());
+    settings.setValue (ed_show_white_space_indent.key, editor_ws_indent_checkbox->isChecked ());
+    settings.setValue (ed_show_eol_chars.key, cb_show_eol->isChecked ());
+    settings.setValue (ed_show_hscroll_bar.key, cb_show_hscrollbar->isChecked ());
+    settings.setValue (ed_default_eol_mode.key, combo_eol_mode->currentIndex ());
 
-    settings->setValue (ed_tab_position.key, editor_combox_tab_pos->currentIndex ());
-    settings->setValue (ed_tabs_rotated.key, editor_cb_tabs_rotated->isChecked ());
-    settings->setValue (ed_tabs_max_width.key, editor_sb_tabs_max_width->value ());
+    settings.setValue (ed_tab_position.key, editor_combox_tab_pos->currentIndex ());
+    settings.setValue (ed_tabs_rotated.key, editor_cb_tabs_rotated->isChecked ());
+    settings.setValue (ed_tabs_max_width.key, editor_sb_tabs_max_width->value ());
 
     // Comment strings
     int rb_uncomment = 0;
@@ -1132,56 +1122,56 @@
       {
         if (m_rb_comment_strings[i]->isChecked ())
           {
-            settings->setValue (ed_comment_str.key, i);
+            settings.setValue (ed_comment_str.key, i);
             if (i < 3)
-              settings->setValue (ed_comment_str_old.key, i);
+              settings.setValue (ed_comment_str_old.key, i);
             else
-              settings->setValue (ed_comment_str_old.key, ed_comment_str.def);
+              settings.setValue (ed_comment_str_old.key, ed_comment_str.def);
           }
         if (m_rb_uncomment_strings[i]->isChecked ())
           rb_uncomment = rb_uncomment + (1 << i);
       }
-    settings->setValue (ed_uncomment_str.key, rb_uncomment);
+    settings.setValue (ed_uncomment_str.key, rb_uncomment);
 
-    settings->setValue (ed_default_enc.key, editor_combo_encoding->currentText ());
-    settings->setValue (ed_auto_indent.key, editor_auto_ind_checkbox->isChecked ());
-    settings->setValue (ed_tab_indents_line.key, editor_tab_ind_checkbox->isChecked ());
-    settings->setValue (ed_backspace_unindents_line.key, editor_bs_unind_checkbox->isChecked ());
-    settings->setValue (ed_show_indent_guides.key, editor_ind_guides_checkbox->isChecked ());
-    settings->setValue (ed_indent_width.key, editor_ind_width_spinbox->value ());
-    settings->setValue (ed_indent_uses_tabs.key, editor_ind_uses_tabs_checkbox->isChecked ());
-    settings->setValue (ed_tab_width.key, editor_tab_width_spinbox->value ());
-    settings->setValue (ed_restore_session.key, editor_restoreSession->isChecked ());
-    settings->setValue (ed_create_new_file.key, editor_create_new_file->isChecked ());
-    settings->setValue (ed_hiding_closes_files.key, editor_hiding_closes_files->isChecked ());
-    settings->setValue (ed_always_reload_changed_files.key, editor_reload_changed_files->isChecked ());
-    settings->setValue (ed_force_newline.key, editor_force_newline->isChecked ());
-    settings->setValue (ed_rm_trailing_spaces.key, editor_remove_trailing_spaces->isChecked ());
-    settings->setValue (ed_show_dbg_file.key, editor_show_dbg_file->isChecked ());
+    settings.setValue (ed_default_enc.key, editor_combo_encoding->currentText ());
+    settings.setValue (ed_auto_indent.key, editor_auto_ind_checkbox->isChecked ());
+    settings.setValue (ed_tab_indents_line.key, editor_tab_ind_checkbox->isChecked ());
+    settings.setValue (ed_backspace_unindents_line.key, editor_bs_unind_checkbox->isChecked ());
+    settings.setValue (ed_show_indent_guides.key, editor_ind_guides_checkbox->isChecked ());
+    settings.setValue (ed_indent_width.key, editor_ind_width_spinbox->value ());
+    settings.setValue (ed_indent_uses_tabs.key, editor_ind_uses_tabs_checkbox->isChecked ());
+    settings.setValue (ed_tab_width.key, editor_tab_width_spinbox->value ());
+    settings.setValue (ed_restore_session.key, editor_restoreSession->isChecked ());
+    settings.setValue (ed_create_new_file.key, editor_create_new_file->isChecked ());
+    settings.setValue (ed_hiding_closes_files.key, editor_hiding_closes_files->isChecked ());
+    settings.setValue (ed_always_reload_changed_files.key, editor_reload_changed_files->isChecked ());
+    settings.setValue (ed_force_newline.key, editor_force_newline->isChecked ());
+    settings.setValue (ed_rm_trailing_spaces.key, editor_remove_trailing_spaces->isChecked ());
+    settings.setValue (ed_show_dbg_file.key, editor_show_dbg_file->isChecked ());
 
     // file browser
-    settings->setValue (fb_sync_octdir.key, sync_octave_directory->isChecked ());
-    settings->setValue (fb_restore_last_dir.key, cb_restore_file_browser_dir->isChecked ());
-    settings->setValue (fb_startup_dir.key, le_file_browser_dir->text ());
-    settings->setValue (fb_txt_file_ext.key, le_file_browser_extensions->text ());
+    settings.setValue (fb_sync_octdir.key, sync_octave_directory->isChecked ());
+    settings.setValue (fb_restore_last_dir.key, cb_restore_file_browser_dir->isChecked ());
+    settings.setValue (fb_startup_dir.key, le_file_browser_dir->text ());
+    settings.setValue (fb_txt_file_ext.key, le_file_browser_extensions->text ());
 
     // network
-    settings->setValue (nr_allow_connection.key, checkbox_allow_web_connect->isChecked ());
-    settings->setValue (global_use_proxy.key, use_proxy_server->isChecked ());
-    settings->setValue (global_proxy_type.key, proxy_type->currentText ());
-    settings->setValue (global_proxy_host.key, proxy_host_name->text ());
-    settings->setValue (global_proxy_port.key, proxy_port->text ());
-    settings->setValue (global_proxy_user.key, proxy_username->text ());
-    settings->setValue (global_proxy_pass.key, proxy_password->text ());
+    settings.setValue (nr_allow_connection.key, checkbox_allow_web_connect->isChecked ());
+    settings.setValue (global_use_proxy.key, use_proxy_server->isChecked ());
+    settings.setValue (global_proxy_type.key, proxy_type->currentText ());
+    settings.setValue (global_proxy_host.key, proxy_host_name->text ());
+    settings.setValue (global_proxy_port.key, proxy_port->text ());
+    settings.setValue (global_proxy_user.key, proxy_username->text ());
+    settings.setValue (global_proxy_pass.key, proxy_password->text ());
 
     // command window
-    settings->setValue (cs_font_size.key, terminal_fontSize->value ());
-    settings->setValue (cs_font.key, terminal_fontName->currentFont ().family ());
-    settings->setValue (cs_cursor_use_fgcol.key, terminal_cursorUseForegroundColor->isChecked ());
-    settings->setValue (cs_focus_cmd.key, terminal_focus_command->isChecked ());
-    settings->setValue (cs_dbg_location.key, terminal_print_dbg_location->isChecked ());
-    settings->setValue (cs_hist_buffer.key, terminal_history_buffer->value ());
-    write_terminal_colors (settings);
+    settings.setValue (cs_font_size.key, terminal_fontSize->value ());
+    settings.setValue (cs_font.key, terminal_fontName->currentFont ().family ());
+    settings.setValue (cs_cursor_use_fgcol.key, terminal_cursorUseForegroundColor->isChecked ());
+    settings.setValue (cs_focus_cmd.key, terminal_focus_command->isChecked ());
+    settings.setValue (cs_dbg_location.key, terminal_print_dbg_location->isChecked ());
+    settings.setValue (cs_hist_buffer.key, terminal_history_buffer->value ());
+    write_terminal_colors ();
 
     // the cursor
     QString cursor_type;
@@ -1191,7 +1181,7 @@
     else
       cursor_type = cs_cursor.def.toString ();
 
-    settings->setValue (cs_cursor.key, cursor_type);
+    settings.setValue (cs_cursor.key, cursor_type);
 
 #if defined (HAVE_QSCINTILLA)
     // editor styles: create lexer, get dialog contents, and write settings
@@ -1200,71 +1190,74 @@
 #if defined (HAVE_LEXER_OCTAVE)
 
     lexer = new QsciLexerOctave ();
-    write_lexer_settings (lexer, settings);
+    write_lexer_settings (lexer);
     delete lexer;
 
 #elif defined (HAVE_LEXER_MATLAB)
 
     lexer = new QsciLexerMatlab ();
-    write_lexer_settings (lexer, settings);
+    write_lexer_settings (lexer);
     delete lexer;
 
 #endif
 
     lexer = new QsciLexerCPP ();
-    write_lexer_settings (lexer, settings);
+    write_lexer_settings (lexer);
     delete lexer;
 
     lexer = new QsciLexerJava ();
-    write_lexer_settings (lexer, settings);
+    write_lexer_settings (lexer);
     delete lexer;
 
     lexer = new QsciLexerPerl ();
-    write_lexer_settings (lexer, settings);
+    write_lexer_settings (lexer);
     delete lexer;
 
     lexer = new QsciLexerBatch ();
-    write_lexer_settings (lexer, settings);
+    write_lexer_settings (lexer);
     delete lexer;
 
     lexer = new QsciLexerDiff ();
-    write_lexer_settings (lexer, settings);
+    write_lexer_settings (lexer);
     delete lexer;
 
     lexer = new QsciLexerBash ();
-    write_lexer_settings (lexer, settings);
+    write_lexer_settings (lexer);
     delete lexer;
 
     lexer = new octave_txt_lexer ();
-    write_lexer_settings (lexer, settings);
+    write_lexer_settings (lexer);
     delete lexer;
 
 #endif
 
     // Workspace
-    write_workspace_colors (settings);
+    write_workspace_colors ();
 
     // Variable editor
-    settings->setValue (ve_column_width.key, varedit_columnWidth->value ());
-    settings->setValue (ve_row_height.key, varedit_rowHeight->value ());
-    settings->setValue (ve_use_terminal_font.key, varedit_useTerminalFont->isChecked ());
-    settings->setValue (ve_alternate_rows.key, varedit_alternate->isChecked ());
-    settings->setValue (ve_font_name.key, varedit_font->currentFont ().family ());
-    settings->setValue (ve_font_size.key, varedit_fontSize->value ());
-    write_varedit_colors (settings);
+    settings.setValue (ve_column_width.key, varedit_columnWidth->value ());
+    settings.setValue (ve_row_height.key, varedit_rowHeight->value ());
+    settings.setValue (ve_use_terminal_font.key, varedit_useTerminalFont->isChecked ());
+    settings.setValue (ve_alternate_rows.key, varedit_alternate->isChecked ());
+    settings.setValue (ve_font_name.key, varedit_font->currentFont ().family ());
+    settings.setValue (ve_font_size.key, varedit_fontSize->value ());
+    write_varedit_colors ();
 
     // shortcuts
 
-    settings->setValue (sc_prevent_rl_conflicts.key, cb_prevent_readline_conflicts->isChecked ());
-    settings->setValue (sc_prevent_rl_conflicts_menu.key, cb_prevent_readline_conflicts_menu->isChecked ());
+    settings.setValue (sc_prevent_rl_conflicts.key, cb_prevent_readline_conflicts->isChecked ());
+    settings.setValue (sc_prevent_rl_conflicts_menu.key, cb_prevent_readline_conflicts_menu->isChecked ());
+
     shortcut_manager& scmgr = m_octave_qobj.get_shortcut_manager ();
     scmgr.write_shortcuts (settings, closing);
 
-    settings->sync ();
+    settings.sync ();
   }
 
-  void settings_dialog::read_workspace_colors (gui_settings *settings)
+  void settings_dialog::read_workspace_colors (void)
   {
+    gui_settings settings;
+
     // Construct the grid with all color related settings
     QGridLayout *style_grid = new QGridLayout ();
     QVector<QLabel *> description (ws_colors_count);
@@ -1273,7 +1266,7 @@
     int column = 0;
     const int color_columns = 3;  // place colors in so many columns
     int row = 0;
-    int mode = settings->value (ws_color_mode).toInt ();
+    int mode = settings.value (ws_color_mode).toInt ();
 
     m_ws_enable_colors = new QCheckBox (tr ("Enable attribute colors"));
     style_grid->addWidget (m_ws_enable_colors, row++, column, 1, 4);
@@ -1283,7 +1276,7 @@
     connect (m_ws_enable_colors, &QCheckBox::toggled,
              m_ws_hide_tool_tips, &QCheckBox::setEnabled);
     m_ws_hide_tool_tips->setChecked
-      (settings->value (ws_hide_tool_tips).toBool ());
+      (settings.value (ws_hide_tool_tips).toBool ());
 
     QCheckBox *cb_color_mode = new QCheckBox (tr (settings_color_modes.toStdString ().data ()));
     cb_color_mode->setToolTip (tr (settings_color_modes_tooltip.toStdString ().data ()));
@@ -1299,7 +1292,7 @@
              pb_reload_default_colors, &QPushButton::setEnabled);
     style_grid->addWidget (pb_reload_default_colors, row+1, column++);
 
-    bool colors_enabled = settings->value (ws_enable_colors).toBool ();
+    bool colors_enabled = settings.value (ws_enable_colors).toBool ();
 
     for (int i = 0; i < ws_colors_count; i++)
       {
@@ -1310,7 +1303,7 @@
         connect (m_ws_enable_colors, &QCheckBox::toggled,
                  description[i], &QLabel::setEnabled);
 
-        QColor setting_color = settings->color_value (ws_colors[i], mode);
+        QColor setting_color = settings.color_value (ws_colors[i], mode);
         color[i] = new color_picker (setting_color);
         color[i]->setObjectName (ws_colors[i].key);
         color[i]->setMinimumSize (30, 10);
@@ -1354,8 +1347,7 @@
     if (cb_color_mode && cb_color_mode->isChecked ())
       m = 1;
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     color_picker *c_picker;
 
@@ -1367,21 +1359,23 @@
             if (def != settings_reload_default_colors_flag)
               {
                 // Get current value from settings or the default
-                c_picker->set_color (settings->color_value (ws_colors[i], m));
+                c_picker->set_color (settings.color_value (ws_colors[i], m));
               }
             else
               {
                 // Get the default value
-                c_picker->set_color (settings->get_color_value (ws_colors[i].def, m));
+                c_picker->set_color (settings.get_color_value (ws_colors[i].def, m));
               }
           }
       }
   }
 
-  void settings_dialog::write_workspace_colors (gui_settings *settings)
+  void settings_dialog::write_workspace_colors (void)
   {
-    settings->setValue (ws_enable_colors.key, m_ws_enable_colors->isChecked ());
-    settings->setValue (ws_hide_tool_tips.key, m_ws_hide_tool_tips->isChecked ());
+    gui_settings settings;
+
+    settings.setValue (ws_enable_colors.key, m_ws_enable_colors->isChecked ());
+    settings.setValue (ws_hide_tool_tips.key, m_ws_hide_tool_tips->isChecked ());
 
     QCheckBox *cb_color_mode
       = workspace_colors_box->findChild <QCheckBox *> (ws_color_mode.key);
@@ -1396,21 +1390,23 @@
       {
         color = workspace_colors_box->findChild <color_picker *> (ws_colors[i].key);
         if (color)
-          settings->set_color_value (ws_colors[i], color->color (), mode);
+          settings.set_color_value (ws_colors[i], color->color (), mode);
       }
 
-    settings->setValue (ws_color_mode.key, mode);
+    settings.setValue (ws_color_mode.key, mode);
 
-    settings->sync ();
+    settings.sync ();
   }
 
-  void settings_dialog::read_terminal_colors (gui_settings *settings)
+  void settings_dialog::read_terminal_colors (void)
   {
+    gui_settings settings;
+
     QGridLayout *style_grid = new QGridLayout ();
     QVector<QLabel *> description (cs_colors_count);
     QVector<color_picker *> color (cs_colors_count);
 
-    int mode = settings->value (cs_color_mode).toInt ();
+    int mode = settings.value (cs_color_mode).toInt ();
 
     QCheckBox *cb_color_mode = new QCheckBox (tr (settings_color_modes.toStdString ().data ()));
     cb_color_mode->setToolTip (tr (settings_color_modes_tooltip.toStdString ().data ()));
@@ -1430,7 +1426,7 @@
         description[i] = new QLabel ("    "
             + tr (cs_color_names.at (i).toStdString ().data ()));
         description[i]->setAlignment (Qt::AlignRight);
-        QColor setting_color = settings->color_value (cs_colors[i], mode);
+        QColor setting_color = settings.color_value (cs_colors[i], mode);
         color[i] = new color_picker (setting_color);
         color[i]->setObjectName (cs_colors[i].key);
         color[i]->setMinimumSize (30, 10);
@@ -1463,8 +1459,7 @@
     if (cb_color_mode && cb_color_mode->isChecked ())
       m = 1;
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     color_picker *c_picker;
 
@@ -1476,18 +1471,18 @@
             if (def != settings_reload_default_colors_flag)
               {
                 // Get current value from settings or the default
-                c_picker->set_color (settings->color_value (cs_colors[i], m));
+                c_picker->set_color (settings.color_value (cs_colors[i], m));
               }
             else
               {
                 // Get the default value
-                c_picker->set_color (settings->get_color_value (cs_colors[i].def, m));
+                c_picker->set_color (settings.get_color_value (cs_colors[i].def, m));
               }
           }
       }
   }
 
-  void settings_dialog::write_terminal_colors (gui_settings *settings)
+  void settings_dialog::write_terminal_colors (void)
   {
     QCheckBox *cb_color_mode
       = terminal_colors_box->findChild <QCheckBox *> (cs_color_mode.key);
@@ -1496,27 +1491,31 @@
     if (cb_color_mode && cb_color_mode->isChecked ())
       mode = 1;
 
+    gui_settings settings;
+
     color_picker *color;
 
     for (int i = 0; i < cs_color_names.size (); i++)
       {
         color = terminal_colors_box->findChild <color_picker *> (cs_colors[i].key);
         if (color)
-          settings->set_color_value (cs_colors[i], color->color (), mode);
+          settings.set_color_value (cs_colors[i], color->color (), mode);
       }
 
-    settings->setValue (cs_color_mode.key, mode);
+    settings.setValue (cs_color_mode.key, mode);
 
-    settings->sync ();
+    settings.sync ();
   }
 
-  void settings_dialog::read_varedit_colors (gui_settings *settings)
+  void settings_dialog::read_varedit_colors (void)
   {
+    gui_settings settings;
+
     QGridLayout *style_grid = new QGridLayout ();
     QVector<QLabel *> description (ve_colors_count);
     QVector<color_picker *> color (ve_colors_count);
 
-    int mode = settings->value (ve_color_mode).toInt ();
+    int mode = settings.value (ve_color_mode).toInt ();
 
     QCheckBox *cb_color_mode = new QCheckBox (tr (settings_color_modes.toStdString ().data ()));
     cb_color_mode->setToolTip (tr (settings_color_modes_tooltip.toStdString ().data ()));
@@ -1537,7 +1536,7 @@
             + tr (ve_color_names.at (i).toStdString ().data ()));
         description[i]->setAlignment (Qt::AlignRight);
 
-        QColor setting_color = settings->color_value (ve_colors[i], mode);
+        QColor setting_color = settings.color_value (ve_colors[i], mode);
         color[i] = new color_picker (setting_color);
         color[i]->setObjectName (ve_colors[i].key);
         color[i]->setMinimumSize (30, 10);
@@ -1570,8 +1569,7 @@
     if (cb_color_mode && cb_color_mode->isChecked ())
       m = 1;
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     color_picker *c_picker;
 
@@ -1583,18 +1581,18 @@
             if (def != settings_reload_default_colors_flag)
               {
                 // Get current value from settings or the default
-                c_picker->set_color (settings->color_value (ve_colors[i], m));
+                c_picker->set_color (settings.color_value (ve_colors[i], m));
               }
             else
               {
                 // Get the default value
-                c_picker->set_color (settings->get_color_value (ve_colors[i].def, m));
+                c_picker->set_color (settings.get_color_value (ve_colors[i].def, m));
               }
           }
       }
   }
 
-  void settings_dialog::write_varedit_colors (gui_settings *settings)
+  void settings_dialog::write_varedit_colors (void)
   {
     QCheckBox *cb_color_mode
       = varedit_colors_box->findChild <QCheckBox *> (ve_color_mode.key);
@@ -1603,17 +1601,19 @@
     if (cb_color_mode && cb_color_mode->isChecked ())
       mode = 1;
 
+    gui_settings settings;
+
     color_picker *color;
 
     for (int i = 0; i < ve_colors_count; i++)
       {
         color = varedit_colors_box->findChild <color_picker *> (ve_colors[i].key);
         if (color)
-          settings->set_color_value (ve_colors[i], color->color (), mode);
+          settings.set_color_value (ve_colors[i], color->color (), mode);
       }
 
-    settings->setValue (ve_color_mode.key, mode);
+    settings.setValue (ve_color_mode.key, mode);
 
-    settings->sync ();
+    settings.sync ();
   }
 }
--- a/libgui/src/settings-dialog.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/settings-dialog.h	Fri Dec 02 14:23:53 2022 -0500
@@ -33,7 +33,6 @@
 
 #include "color-picker.h"
 #include "gui-preferences-ed.h"
-#include "gui-settings.h"
 #include "ui-settings-dialog.h"
 
 class QsciLexer;
@@ -84,21 +83,21 @@
   private:
 
 #if defined (HAVE_QSCINTILLA)
-    void update_lexer (QsciLexer *lexer, gui_settings *settings, int mode, int def = 0);
-    void get_lexer_settings (QsciLexer *lexer, gui_settings *settings);
-    void write_lexer_settings (QsciLexer *lexer, gui_settings *settings);
+    void update_lexer (QsciLexer *lexer, int mode, int def = 0);
+    void get_lexer_settings (QsciLexer *lexer);
+    void write_lexer_settings (QsciLexer *lexer);
 #endif
 
     void write_changed_settings (bool closing);
 
-    void read_workspace_colors (gui_settings *settings);
-    void write_workspace_colors (gui_settings *settings);
+    void read_workspace_colors (void);
+    void write_workspace_colors (void);
 
-    void read_terminal_colors (gui_settings *settings);
-    void write_terminal_colors (gui_settings *settings);
+    void read_terminal_colors (void);
+    void write_terminal_colors (void);
 
-    void read_varedit_colors (gui_settings *settings);
-    void write_varedit_colors (gui_settings *settings);
+    void read_varedit_colors (void);
+    void write_varedit_colors (void);
 
     base_qobject& m_octave_qobj;
 
--- a/libgui/src/shortcut-manager.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/shortcut-manager.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -46,6 +46,7 @@
 #include "shortcut-manager.h"
 #include "gui-preferences-global.h"
 #include "gui-preferences-sc.h"
+#include "gui-settings.h"
 #include "error.h"
 
 namespace octave
@@ -122,10 +123,9 @@
 
   void shortcut_manager::init_data (void)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
-    settings->setValue (sc_main_ctrld.key, false); // reset use fo ctrl-d
+    settings.setValue (sc_main_ctrld.key, false); // reset use fo ctrl-d
 
     // actions not related to specific menus or widgets
 
@@ -309,7 +309,7 @@
   }
 
   // write one or all actual shortcut set(s) into a settings file
-  void shortcut_manager::write_shortcuts (gui_settings *settings,
+  void shortcut_manager::write_shortcuts (gui_settings& settings,
                                           bool closing)
   {
     bool sc_ctrld = false;
@@ -318,7 +318,7 @@
 
     for (int i = 0; i < m_sc.count (); i++)  // loop over all shortcuts
       {
-        settings->setValue (sc_group + "/" + m_sc.at (i).m_settings_key,
+        settings.setValue (sc_group + "/" + m_sc.at (i).m_settings_key,
                             m_sc.at (i).m_actual_sc.toString ());
         // special: check main-window for Ctrl-D (Terminal)
         if (m_sc.at (i).m_settings_key.startsWith (sc_main)
@@ -326,7 +326,7 @@
           sc_ctrld = true;
       }
 
-    settings->setValue (sc_main_ctrld.key, sc_ctrld);
+    settings.setValue (sc_main_ctrld.key, sc_ctrld);
 
     if (closing)
       {
@@ -334,7 +334,7 @@
         m_dialog = nullptr;  // make sure it is zero again
       }
 
-    settings->sync ();      // sync the settings file
+    settings.sync ();      // sync the settings file
   }
 
   void shortcut_manager::set_shortcut (QAction *action, const sc_pref& scpref,
@@ -355,9 +355,9 @@
 
     if (index > -1 && index < m_sc.count ())
       {
-        resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-        gui_settings *settings = rmgr.get_settings ();
-        action->setShortcut (QKeySequence (settings->sc_value (scpref)));
+        gui_settings settings;
+
+        action->setShortcut (QKeySequence (settings.sc_value (scpref)));
       }
     else
       qDebug () << "Key: " << scpref.key << " not found in m_action_hash";
@@ -371,9 +371,9 @@
 
     if (index > -1 && index < m_sc.count ())
       {
-        resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-        gui_settings *settings = rmgr.get_settings ();
-        sc->setKey (QKeySequence (settings->sc_value (scpref)));
+        gui_settings settings;
+
+        sc->setKey (QKeySequence (settings.sc_value (scpref)));
       }
     else
       qDebug () << "Key: " << scpref.key << " not found in m_action_hash";
@@ -524,9 +524,10 @@
 
         // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
         int opts = 0;  // No options by default.
-        resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-        gui_settings *settings = rmgr.get_settings ();
-        if (! settings->value (global_use_native_dialogs).toBool ())
+
+        gui_settings settings;
+
+        if (! settings.value (global_use_native_dialogs).toBool ())
           opts = QFileDialog::DontUseNativeDialog;
 
         if (action == OSC_IMPORT)
@@ -554,9 +555,9 @@
         else
           {
             if (action == OSC_IMPORT)
-              import_shortcuts (&osc_settings);   // import (special action)
+              import_shortcuts (osc_settings);   // import (special action)
             else if (action == OSC_EXPORT)
-              write_shortcuts (&osc_settings, false); // export, (save settings)
+              write_shortcuts (osc_settings, false); // export, (save settings)
           }
       }
     else
@@ -626,17 +627,16 @@
 
   void shortcut_manager::init (const QString& description, const sc_pref& sc)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
-    QKeySequence actual = QKeySequence (settings->sc_value (sc));
+    QKeySequence actual = QKeySequence (settings.sc_value (sc));
 
     // append the new shortcut to the list
     shortcut_t shortcut_info;
     shortcut_info.m_description = description;
     shortcut_info.m_settings_key = sc.key;
     shortcut_info.m_actual_sc = actual;
-    shortcut_info.m_default_sc = settings->sc_def_value (sc);
+    shortcut_info.m_default_sc = settings.sc_def_value (sc);
     m_sc << shortcut_info;
 
     // insert shortcut in order to check for duplicates later
@@ -649,7 +649,7 @@
       = sc_main_file.mid (0, sc_main_file.indexOf ('_') + 1);
     if (sc.key.startsWith (main_group_prefix)
         && actual == QKeySequence (Qt::ControlModifier+Qt::Key_D))
-      settings->setValue (sc_main_ctrld.key, true);
+      settings.setValue (sc_main_ctrld.key, true);
   }
 
   void shortcut_manager::shortcut_dialog (int index)
@@ -745,7 +745,7 @@
 
   // import a shortcut set from a given settings file and refresh the
   // tree view
-  void shortcut_manager::import_shortcuts (gui_settings *settings)
+  void shortcut_manager::import_shortcuts (gui_settings& settings)
   {
     for (int i = 0; i < m_sc.count (); i++)
       {
@@ -755,7 +755,7 @@
         shortcut_t sc = m_sc.at (i);
 
         // get new shortcut from settings and use the old one as default
-        sc.m_actual_sc = QKeySequence (settings->value (sc_group + sc.m_settings_key,sc.m_actual_sc).toString ());
+        sc.m_actual_sc = QKeySequence (settings.value (sc_group + sc.m_settings_key, sc.m_actual_sc).toString ());
 
         // replace the old with the new one
         m_sc.replace (i, sc);
--- a/libgui/src/shortcut-manager.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/shortcut-manager.h	Fri Dec 02 14:23:53 2022 -0500
@@ -33,7 +33,7 @@
 #include <QTreeWidget>
 #include <QWidget>
 
-#include "gui-settings.h"
+#include "gui-preferences.h"
 
 namespace octave
 {
@@ -61,6 +61,7 @@
 
   };
 
+  class gui_settings;
   class base_qobject;
 
   class shortcut_manager : public QWidget
@@ -88,7 +89,7 @@
 
     void init_data (void);
 
-    void write_shortcuts (gui_settings *settings, bool closing);
+    void write_shortcuts (gui_settings& settings, bool closing);
 
     void set_shortcut (QAction *action, const sc_pref& scpref, bool enable = true);
 
@@ -108,7 +109,7 @@
 
     void init (const QString&, const sc_pref& scpref);
     void shortcut_dialog (int);
-    void import_shortcuts (gui_settings *settings);
+    void import_shortcuts (gui_settings& settings);
     void reset_default_shortcuts (void);
     bool overwrite_all_shortcuts (void);
 
--- a/libgui/src/terminal-dock-widget.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/terminal-dock-widget.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -101,16 +101,16 @@
 
     // Chose a reasonable size at startup in order to avoid truncated
     // startup messages
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+
+    gui_settings settings;
 
     QFont font = QFont ();
     font.setStyleHint (QFont::TypeWriter);
-    QString default_font = settings->value (global_mono_font).toString ();
+    QString default_font = settings.value (global_mono_font).toString ();
     font.setFamily
-      (settings->value (cs_font.key, default_font).toString ());
+      (settings.value (cs_font.key, default_font).toString ());
     font.setPointSize
-      (settings->value (cs_font_size).toInt ());
+      (settings.value (cs_font_size).toInt ());
 
     QFontMetrics metrics(font);
 
@@ -151,9 +151,9 @@
   }
 #endif
 
-  void terminal_dock_widget::notice_settings (const gui_settings *settings)
+  void terminal_dock_widget::notice_settings (void)
   {
-    emit settings_changed (settings);
+    emit settings_changed ();
   }
 
   void terminal_dock_widget::init_command_prompt ()
--- a/libgui/src/terminal-dock-widget.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/terminal-dock-widget.h	Fri Dec 02 14:23:53 2022 -0500
@@ -65,7 +65,7 @@
 
   signals:
 
-    void settings_changed (const gui_settings *settings);
+    void settings_changed (void);
 
     // Note: the following four signals are
     // currently only used by the new experimental terminal widget.
@@ -80,7 +80,7 @@
 
   public slots:
 
-    void notice_settings (const gui_settings *settings);
+    void notice_settings (void);
 
   private:
 
--- a/libgui/src/variable-editor.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/variable-editor.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -55,6 +55,7 @@
 #include "gui-preferences-global.h"
 #include "gui-preferences-sc.h"
 #include "gui-preferences-ve.h"
+#include "gui-settings.h"
 #include "octave-qobject.h"
 #include "octave-qtutils.h"
 #include "ovl.h"
@@ -493,9 +494,10 @@
 
     // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
     int opts = 0;  // No options by default.
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
-    if (! settings->value (global_use_native_dialogs).toBool ())
+
+    gui_settings settings;
+
+    if (! settings.value (global_use_native_dialogs).toBool ())
       opts = QFileDialog::DontUseNativeDialog;
 
     QString name = objectName ();
@@ -1203,13 +1205,8 @@
   void
   variable_editor::edit_variable (const QString& name, const octave_value& val)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-
     if (m_stylesheet.isEmpty ())
-      {
-        gui_settings *settings = rmgr.get_settings ();
-        notice_settings (settings);
-      }
+      notice_settings ();
 
     QDockWidget *existing_qdw = m_main->findChild<QDockWidget *> (name);
     if (existing_qdw)
@@ -1417,31 +1414,33 @@
   }
 
   void
-  variable_editor::notice_settings (const gui_settings *settings)
+  variable_editor::notice_settings (void)
   {
-    m_main->notice_settings (settings); // update settings in parent main win
+    gui_settings settings;
 
-    m_default_width = settings->value (ve_column_width).toInt ();
+    m_main->notice_settings (); // update settings in parent main win
 
-    m_default_height = settings->value (ve_row_height).toInt ();
+    m_default_width = settings.value (ve_column_width).toInt ();
+
+    m_default_height = settings.value (ve_row_height).toInt ();
 
-    m_alternate_rows = settings->value (ve_alternate_rows).toBool ();
+    m_alternate_rows = settings.value (ve_alternate_rows).toBool ();
 
-    m_use_terminal_font = settings->value (ve_use_terminal_font).toBool ();
+    m_use_terminal_font = settings.value (ve_use_terminal_font).toBool ();
 
     QString font_name;
     int font_size;
-    QString default_font = settings->value (global_mono_font).toString ();
+    QString default_font = settings.value (global_mono_font).toString ();
 
     if (m_use_terminal_font)
       {
-        font_name = settings->value (cs_font.key, default_font).toString ();
-        font_size = settings->value (cs_font_size).toInt ();
+        font_name = settings.value (cs_font.key, default_font).toString ();
+        font_size = settings.value (cs_font_size).toInt ();
       }
     else
       {
-        font_name = settings->value (ve_font_name.key, default_font).toString ();
-        font_size = settings->value (ve_font_size).toInt ();
+        font_name = settings.value (ve_font_name.key, default_font).toString ();
+        font_size = settings.value (ve_font_size).toInt ();
       }
 
     m_font = QFont (font_name, font_size);
@@ -1450,11 +1449,11 @@
 
     m_add_font_height = fm.height ();
 
-    int mode = settings->value (ve_color_mode).toInt ();
+    int mode = settings.value (ve_color_mode).toInt ();
 
     for (int i = 0; i < ve_colors_count; i++)
       {
-        QColor setting_color = settings->color_value (ve_colors[i], mode);
+        QColor setting_color = settings.color_value (ve_colors[i], mode);
         m_table_colors.replace (i, setting_color);
       }
 
@@ -1464,7 +1463,7 @@
 
     if (m_tool_bar)
       {
-        int size_idx = settings->value (global_icon_size).toInt ();
+        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 ();
--- a/libgui/src/variable-editor.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/variable-editor.h	Fri Dec 02 14:23:53 2022 -0500
@@ -32,7 +32,6 @@
 #include <QTableView>
 
 #include "dw-main-window.h"
-#include "gui-settings.h"
 #include "octave-dock-widget.h"
 #include "qt-interpreter-events.h"
 #include "tab-bar.h"
@@ -340,7 +339,7 @@
 
     void callUpdate (const QModelIndex&, const QModelIndex&);
 
-    void notice_settings (const gui_settings *);
+    void notice_settings (void);
 
     void edit_variable (const QString& name, const octave_value& val);
 
--- a/libgui/src/welcome-wizard.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/welcome-wizard.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -39,6 +39,7 @@
 
 #include "gui-preferences-dw.h"
 #include "gui-preferences-nr.h"
+#include "gui-settings.h"
 #include "octave-qobject.h"
 #include "welcome-wizard.h"
 
@@ -146,15 +147,12 @@
     resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
     rmgr.reload_settings ();
 
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
-    if (settings)
-      {
-        settings->setValue (nr_allow_connection.key,
-                            m_allow_web_connect_state);
+    settings.setValue (nr_allow_connection.key,
+                       m_allow_web_connect_state);
 
-        settings->sync ();
-      }
+    settings.sync ();
 
     QDialog::accept ();
   }
--- a/libgui/src/workspace-model.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/workspace-model.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -198,15 +198,17 @@
   }
 
   void
-  workspace_model::notice_settings (const gui_settings *settings)
+  workspace_model::notice_settings (void)
   {
-    m_enable_colors = settings->value (ws_enable_colors).toBool ();
+    gui_settings settings;
 
-    int mode = settings->value (ws_color_mode).toInt ();
+    m_enable_colors = settings.value (ws_enable_colors).toBool ();
+
+    int mode = settings.value (ws_color_mode).toInt ();
 
     for (int i = 0; i < ws_colors_count; i++)
       {
-        QColor setting_color = settings->color_value (ws_colors[i], mode);
+        QColor setting_color = settings.color_value (ws_colors[i], mode);
 
         QPalette p (setting_color);
         m_storage_class_colors.replace (i, setting_color);
--- a/libgui/src/workspace-model.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/workspace-model.h	Fri Dec 02 14:23:53 2022 -0500
@@ -34,8 +34,6 @@
 #include <QStringList>
 #include <QVector>
 
-#include "gui-settings.h"
-
 #include "syminfo.h"
 
 // Defined for purposes of sending QList<int> as part of signal.
@@ -88,7 +86,7 @@
 
     void clear_workspace (void);
 
-    void notice_settings (const gui_settings *);
+    void notice_settings (void);
 
   private:
 
--- a/libgui/src/workspace-view.cc	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/workspace-view.cc	Fri Dec 02 14:23:53 2022 -0500
@@ -42,6 +42,7 @@
 #include <QVBoxLayout>
 
 #include "gui-preferences-ws.h"
+#include "gui-settings.h"
 #include "octave-qobject.h"
 #include "octave-qtutils.h"
 #include "workspace-view.h"
@@ -94,51 +95,46 @@
     ws_layout->addWidget (m_view);
     ws_layout->setSpacing (0);
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
-    if (settings)
-      {
-        m_filter_shown = settings->value (ws_filter_shown).toBool ();
-        m_filter_widget->setVisible (m_filter_shown);
+    m_filter_shown = settings.value (ws_filter_shown).toBool ();
+    m_filter_widget->setVisible (m_filter_shown);
 
-        ws_layout->setMargin (2);
+    ws_layout->setMargin (2);
 
-        // Set the empty widget to have our layout.
-        widget ()->setLayout (ws_layout);
+    // Set the empty widget to have our layout.
+    widget ()->setLayout (ws_layout);
 
-        // Initialize collapse/expand state of the workspace subcategories.
+    // Initialize collapse/expand state of the workspace subcategories.
 
-        //enable sorting (setting column and order after model was set)
-        m_view->setSortingEnabled (true);
-        // Initialize column order and width of the workspace
-        m_view->horizontalHeader ()->restoreState
-          (settings->value (ws_column_state.key).toByteArray ());
+    //enable sorting (setting column and order after model was set)
+    m_view->setSortingEnabled (true);
+    // Initialize column order and width of the workspace
+    m_view->horizontalHeader ()->restoreState
+      (settings.value (ws_column_state.key).toByteArray ());
 
-        // Set header properties for sorting
-        m_view->horizontalHeader ()->setSectionsClickable (true);
-        m_view->horizontalHeader ()->setSectionsMovable (true);
-        m_view->horizontalHeader ()->setSortIndicator (
-          settings->value (ws_sort_column).toInt (),
-          static_cast<Qt::SortOrder> (settings->value (ws_sort_order).toUInt ()));
-          // FIXME: use value<Qt::SortOrder> instead of static cast after
-          //        dropping support of Qt 5.4
+    // Set header properties for sorting
+    m_view->horizontalHeader ()->setSectionsClickable (true);
+    m_view->horizontalHeader ()->setSectionsMovable (true);
+    m_view->horizontalHeader ()->setSortIndicator (
+                                                   settings.value (ws_sort_column).toInt (),
+                                                   static_cast<Qt::SortOrder> (settings.value (ws_sort_order).toUInt ()));
+    // FIXME: use value<Qt::SortOrder> instead of static cast after
+    //        dropping support of Qt 5.4
 
-        m_view->horizontalHeader ()->setSortIndicatorShown (true);
+    m_view->horizontalHeader ()->setSortIndicatorShown (true);
 
-        m_view->horizontalHeader ()->setContextMenuPolicy (Qt::CustomContextMenu);
-        connect (m_view->horizontalHeader (),
-                 &QTableView::customContextMenuRequested,
-                 this, &workspace_view::header_contextmenu_requested);
+    m_view->horizontalHeader ()->setContextMenuPolicy (Qt::CustomContextMenu);
+    connect (m_view->horizontalHeader (),
+             &QTableView::customContextMenuRequested,
+             this, &workspace_view::header_contextmenu_requested);
 
-        // Init state of the filter
-        m_filter->addItems (settings->value (ws_mru_list.key).toStringList ());
+    // Init state of the filter
+    m_filter->addItems (settings.value (ws_mru_list.key).toStringList ());
 
-        bool filter_state =
-          settings->value (ws_filter_active).toBool ();
-        m_filter_checkbox->setChecked (filter_state);
-        filter_activate (filter_state);
-      }
+    bool filter_state = settings.value (ws_filter_active).toBool ();
+    m_filter_checkbox->setChecked (filter_state);
+    filter_activate (filter_state);
 
     // Connect signals and slots.
 
@@ -167,11 +163,12 @@
     m_view->setModel (&m_filter_model);
 
     // set the sorting after the model is set, it would be ignored otherwise
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+
+    gui_settings settings;
+
     m_view->sortByColumn (
-      settings->value (ws_sort_column).toInt (),
-      static_cast<Qt::SortOrder> (settings->value (ws_sort_order).toUInt ()));
+      settings.value (ws_sort_column).toInt (),
+      static_cast<Qt::SortOrder> (settings.value (ws_sort_order).toUInt ()));
       // FIXME: use value<Qt::SortOrder> instead of static cast after
       //        dropping support of Qt 5.4
 
@@ -179,17 +176,19 @@
   }
 
   void
-  workspace_view::notice_settings (const gui_settings *settings)
+  workspace_view::notice_settings (void)
   {
-    m_model->notice_settings (settings); // update colors of model first
+    gui_settings settings;
+
+    m_model->notice_settings (); // update colors of model first
 
     for (int i = 0; i < ws_columns_shown.length (); i++)
-      m_view->setColumnHidden (i + 1, ! settings->value (ws_columns_shown_keys.at (i), true).toBool ());
+      m_view->setColumnHidden (i + 1, ! settings.value (ws_columns_shown_keys.at (i), true).toBool ());
 
     QString tool_tip;
 
-    if (settings->value (ws_enable_colors).toBool ()
-        && ! settings->value (ws_hide_tool_tips).toBool ())
+    if (settings.value (ws_enable_colors).toBool ()
+        && ! settings.value (ws_hide_tool_tips).toBool ())
       {
         tool_tip  = QString (tr ("View the variables in the active workspace.<br>"));
         tool_tip += QString (tr ("Colors for variable attributes:"));
@@ -211,29 +210,25 @@
   void
   workspace_view::save_settings (void)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
-    if (! settings)
-      return;
-
-    settings->setValue (ws_column_state.key,
-                        m_view->horizontalHeader ()->saveState ());
+    settings.setValue (ws_column_state.key,
+                       m_view->horizontalHeader ()->saveState ());
 
     int sort_column = m_view->horizontalHeader ()->sortIndicatorSection ();
     Qt::SortOrder sort_order = m_view->horizontalHeader ()->sortIndicatorOrder ();
-    settings->setValue (ws_sort_column.key, sort_column);
-    settings->setValue (ws_sort_order.key, sort_order);
+    settings.setValue (ws_sort_column.key, sort_column);
+    settings.setValue (ws_sort_order.key, sort_order);
 
-    settings->setValue (ws_filter_active.key, m_filter_checkbox->isChecked ());
-    settings->setValue (ws_filter_shown.key, m_filter_shown);
+    settings.setValue (ws_filter_active.key, m_filter_checkbox->isChecked ());
+    settings.setValue (ws_filter_shown.key, m_filter_shown);
 
     QStringList mru;
     for (int i = 0; i < m_filter->count (); i++)
       mru.append (m_filter->itemText (i));
-    settings->setValue (ws_mru_list.key, mru);
+    settings.setValue (ws_mru_list.key, mru);
 
-    settings->sync ();
+    settings.sync ();
 
     octave_dock_widget::save_settings ();
   }
@@ -292,8 +287,7 @@
     QMenu menu (this);
     QSignalMapper sig_mapper (this);
 
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     for (int i = 0; i < ws_columns_shown.length (); i++)
       {
@@ -302,7 +296,7 @@
                             &sig_mapper, SLOT (map ()));
         sig_mapper.setMapping (action, i);
         action->setCheckable (true);
-        action->setChecked (settings->value (ws_columns_shown_keys.at (i), true).toBool ());
+        action->setChecked (settings.value (ws_columns_shown_keys.at (i), true).toBool ());
       }
 
     // FIXME: We could use
@@ -328,16 +322,15 @@
   void
   workspace_view::toggle_header (int col)
   {
-    resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
-    gui_settings *settings = rmgr.get_settings ();
+    gui_settings settings;
 
     QString key = ws_columns_shown_keys.at (col);
-    bool shown = settings->value (key, true).toBool ();
+    bool shown = settings.value (key, true).toBool ();
 
     m_view->setColumnHidden (col + 1, shown);
 
-    settings->setValue (key, ! shown);
-    settings->sync ();
+    settings.setValue (key, ! shown);
+    settings.sync ();
 
     octave_dock_widget::save_settings ();
   }
--- a/libgui/src/workspace-view.h	Fri Dec 02 15:51:44 2022 -0500
+++ b/libgui/src/workspace-view.h	Fri Dec 02 14:23:53 2022 -0500
@@ -74,7 +74,7 @@
 
     void setModel (workspace_model *model);
 
-    void notice_settings (const gui_settings *);
+    void notice_settings (void);
 
     void save_settings (void);