From 00e89452bdbdc1c231ceb16fe89728b4aa26e6d7 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Mon, 4 Nov 2019 10:23:09 +0100 Subject: [PATCH] TextEditor: Fix dropping explicitly set codec to System If we set the default encoding to the System-wide encoding we failed to distinguish them as separate encodings. Explicitly handle 'System' encoding to avoid dropping to the 'System' encoding when setting an encoding that matches this one exactly. Fixes: QTCREATORBUG-22843 Change-Id: Ib4fa50268ca6f792cdff001b9b07bb18804c4401 Reviewed-by: David Schulz --- .../texteditor/behaviorsettingspage.cpp | 2 +- .../texteditor/behaviorsettingswidget.cpp | 24 +++++++++++++++---- .../texteditor/behaviorsettingswidget.h | 2 +- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/plugins/texteditor/behaviorsettingspage.cpp b/src/plugins/texteditor/behaviorsettingspage.cpp index 833620ef977..8fda3634e8a 100644 --- a/src/plugins/texteditor/behaviorsettingspage.cpp +++ b/src/plugins/texteditor/behaviorsettingspage.cpp @@ -195,7 +195,7 @@ void BehaviorSettingsPage::apply() if (s) { s->setValue(QLatin1String(Core::Constants::SETTINGS_DEFAULTTEXTENCODING), - d->m_page->behaviorWidget->assignedCodec()->name()); + d->m_page->behaviorWidget->assignedCodecName()); } } diff --git a/src/plugins/texteditor/behaviorsettingswidget.cpp b/src/plugins/texteditor/behaviorsettingswidget.cpp index e528a23812a..85f9e222810 100644 --- a/src/plugins/texteditor/behaviorsettingswidget.cpp +++ b/src/plugins/texteditor/behaviorsettingswidget.cpp @@ -28,6 +28,9 @@ #include "tabsettingswidget.h" +#include +#include + #include #include #include @@ -132,17 +135,30 @@ void BehaviorSettingsWidget::setActive(bool active) void BehaviorSettingsWidget::setAssignedCodec(QTextCodec *codec) { + const QString codecName = Core::ICore::settings()->value( + Core::Constants::SETTINGS_DEFAULTTEXTENCODING).toString(); + + int rememberedSystemPosition = -1; for (int i = 0; i < d->m_codecs.size(); ++i) { if (codec == d->m_codecs.at(i)) { - d->m_ui.encodingBox->setCurrentIndex(i); - break; + if (d->m_ui.encodingBox->itemText(i) == codecName) { + d->m_ui.encodingBox->setCurrentIndex(i); + return; + } else { // we've got System matching encoding - but have explicitly set the codec + rememberedSystemPosition = i; + } } } + if (rememberedSystemPosition != -1) + d->m_ui.encodingBox->setCurrentIndex(rememberedSystemPosition); } -QTextCodec *BehaviorSettingsWidget::assignedCodec() const +QByteArray BehaviorSettingsWidget::assignedCodecName() const { - return d->m_codecs.at(d->m_ui.encodingBox->currentIndex()); + return d->m_ui.encodingBox->currentIndex() == 0 + ? QByteArray("System") // we prepend System to the available codecs + : d->m_codecs.at(d->m_ui.encodingBox->currentIndex())->name(); + } void BehaviorSettingsWidget::setCodeStyle(ICodeStylePreferences *preferences) diff --git a/src/plugins/texteditor/behaviorsettingswidget.h b/src/plugins/texteditor/behaviorsettingswidget.h index 9bdfec5bc18..4cbb7709f34 100644 --- a/src/plugins/texteditor/behaviorsettingswidget.h +++ b/src/plugins/texteditor/behaviorsettingswidget.h @@ -55,7 +55,7 @@ public: void setActive(bool active); void setAssignedCodec(QTextCodec *codec); - QTextCodec *assignedCodec() const; + QByteArray assignedCodecName() const; void setCodeStyle(ICodeStylePreferences *preferences);