Mercurial > octave
diff libgui/src/main-window.cc @ 25700:ba8227df92ae
synchronize gui editor encoding when changing __mfile_encdoing__ (bug #54310)
* input.cc (mfile_encoding): call __octave_link_gui_preference__ for
setting the preference editor/default_encoding accordingly
* main-window.cc (gui_preference_adjust): new method for adjusting
and checking some new preferences that have to be set via gui_preference,
in this case the default encoding;
(gui_preference): use new method gui_preference_adjust and only set
the new preference if it has changed;
* main-window.h: new proivate method gui_preference_adjust
* resource-manager.cc (do_get_codecs): new method reading a string list
with all available codecs;
(do_combo_encoding): do net get a list of codecs here, but use the new
method do_get_codecs
* resource-manager.h: new static method get_codecs which only calls
new method do_get_codecs
author | Torsten <mttl@mailbox.org> |
---|---|
date | Sat, 28 Jul 2018 08:29:34 +0200 |
parents | 3418d3729a51 |
children | bd30c6f8cfb7 |
line wrap: on
line diff
--- a/libgui/src/main-window.cc Fri Mar 16 13:17:53 2018 +0100 +++ b/libgui/src/main-window.cc Sat Jul 28 08:29:34 2018 +0200 @@ -2492,6 +2492,41 @@ this, SLOT (handle_undo_request (void))); } + QString main_window::gui_preference_adjust (const QString& key, + const QString& value) + { + QString adjusted_value = value; + + // Immediately return if no new value is given + if (adjusted_value.isEmpty ()) + return adjusted_value; + + // Not all encodings are available. Encodings are uppercase and do not + // use CPxxx but IBMxxx or WINDOWS-xxx. + if (key == "editor/default_encoding") + { + adjusted_value = adjusted_value.toUpper (); + + QStringList codecs; + resource_manager::get_codecs (&codecs); + + QRegExp re ("^CP(\\d+)$"); + if (re.indexIn (adjusted_value) > -1) + { + if (codecs.contains ("IBM" + re.cap (1))) + adjusted_value = "IBM" + re.cap (1); + else if (codecs.contains ("WINDOWS-" + re.cap (1))) + adjusted_value = "WINDOWS-" + re.cap (1); + else + adjusted_value.clear (); + } + else if (! codecs.contains (adjusted_value)) + adjusted_value.clear (); + } + + return adjusted_value; + } + void main_window::gui_preference (const QString& key, const QString& value, QString* read_value) { @@ -2501,9 +2536,13 @@ // Wait for worker to suspend m_octave_qt_link->lock (); - if (! value.isEmpty ()) + // Some preferences need extra handling + QString adjusted_value = gui_preference_adjust (key, value); + + if (! adjusted_value.isEmpty () && (*read_value != adjusted_value)) { - settings->setValue (key, QVariant (value)); + // Change settings only for new, non-empty values + settings->setValue (key, QVariant (adjusted_value)); emit settings_changed (settings); }