From cb5325f6d50dae3acdc6b4a66a24488c10bd3816 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 11 Oct 2021 11:21:16 +0200 Subject: [PATCH] Core: introduce codec support check for text documents So indiviual documents can block codecs they do not support like ui or qml files. Change-Id: I65b605762c696d38be9049f0064fd68aad0193da Reviewed-by: Christian Stenger --- src/plugins/coreplugin/dialogs/codecselector.cpp | 2 ++ src/plugins/coreplugin/textdocument.cpp | 8 +++++++- src/plugins/coreplugin/textdocument.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/dialogs/codecselector.cpp b/src/plugins/coreplugin/dialogs/codecselector.cpp index a84b0fa1122..9b5786c1b42 100644 --- a/src/plugins/coreplugin/dialogs/codecselector.cpp +++ b/src/plugins/coreplugin/dialogs/codecselector.cpp @@ -87,6 +87,8 @@ CodecSelector::CodecSelector(QWidget *parent, Core::BaseTextDocument *doc) int currentIndex = -1; foreach (int mib, sortedMibs) { QTextCodec *c = QTextCodec::codecForMib(mib); + if (!doc->supportsCodec(c)) + continue; if (!buf.isEmpty()) { // slow, should use a feature from QTextCodec or QTextDecoder (but those are broken currently) diff --git a/src/plugins/coreplugin/textdocument.cpp b/src/plugins/coreplugin/textdocument.cpp index 4d6c45dadfc..448854926df 100644 --- a/src/plugins/coreplugin/textdocument.cpp +++ b/src/plugins/coreplugin/textdocument.cpp @@ -183,7 +183,13 @@ void BaseTextDocument::setCodec(const QTextCodec *codec) { if (debug) qDebug() << Q_FUNC_INFO << this << (codec ? codec->name() : QByteArray()); - d->m_format.codec = codec; + if (supportsCodec(codec)) + d->m_format.codec = codec; +} + +bool BaseTextDocument::supportsCodec(const QTextCodec *) const +{ + return true; } void BaseTextDocument::switchUtf8Bom() diff --git a/src/plugins/coreplugin/textdocument.h b/src/plugins/coreplugin/textdocument.h index 7d16b6fa811..83450b8395a 100644 --- a/src/plugins/coreplugin/textdocument.h +++ b/src/plugins/coreplugin/textdocument.h @@ -46,6 +46,7 @@ public: Utils::TextFileFormat format() const; const QTextCodec *codec() const; void setCodec(const QTextCodec *); + virtual bool supportsCodec(const QTextCodec *) const; void switchUtf8Bom(); bool supportsUtf8Bom() const; Utils::TextFileFormat::LineTerminationMode lineTerminationMode() const;