From 666b4a485b3ea87842fb475ce8520d2856d821c7 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 30 Apr 2020 14:23:40 +0200 Subject: Get rid of QTextCodec in the cups support This should all be utf-8 anyway, but right now simply exchange the text codec with a string converter. Change-Id: If0a230776824598b6378bb402d692c941e371104 Reviewed-by: Thiago Macieira --- src/printsupport/dialogs/qpagesetupdialog_unix.cpp | 10 +++++++--- src/printsupport/dialogs/qprintdialog_unix.cpp | 20 +++++++++++--------- 2 files changed, 18 insertions(+), 12 deletions(-) (limited to 'src/printsupport/dialogs') diff --git a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp index 2b7c0ce6ec..8142e57c5a 100644 --- a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp +++ b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp @@ -49,7 +49,7 @@ #include "qpainter.h" #include "qprintdialog.h" -#include "qtextcodec.h" +#include "qstringconverter.h" #include "qdialogbuttonbox.h" #include @@ -592,10 +592,14 @@ void QPageSetupWidget::pageSizeChanged() #if QT_CONFIG(cups) if (m_pageSizePpdOption) { ppd_file_t *ppd = qvariant_cast(m_printDevice->property(PDPK_PpdFile)); - QTextCodec *cupsCodec = QTextCodec::codecForName(ppd->lang_encoding); + QStringDecoder toUtf16(ppd->lang_encoding, QStringDecoder::Flag::Stateless); + if (!toUtf16.isValid()) { + qWarning() << "QPrinSupport: Cups uses unsupported encoding" << ppd->lang_encoding; + toUtf16 = QStringDecoder(QStringDecoder::Utf8); + } for (int i = 0; i < m_pageSizePpdOption->num_choices; ++i) { const ppd_choice_t *choice = &m_pageSizePpdOption->choices[i]; - if (cupsCodec->toUnicode(choice->text) == m_ui.pageSizeCombo->currentText()) { + if (toUtf16(choice->text) == m_ui.pageSizeCombo->currentText()) { const auto values = QStringList{} << QString::fromLatin1(m_pageSizePpdOption->keyword) << QString::fromLatin1(choice->choice); m_printDevice->setProperty(PDPK_PpdOption, values); diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp index cc6694d471..db89123cb4 100644 --- a/src/printsupport/dialogs/qprintdialog_unix.cpp +++ b/src/printsupport/dialogs/qprintdialog_unix.cpp @@ -51,7 +51,7 @@ #include #include #include -#include +#include #include #if QT_CONFIG(filesystemmodel) #include @@ -164,7 +164,8 @@ private: bool anyAdvancedOptionConflict() const; QPrintDevice *m_currentPrintDevice; - QTextCodec *m_cupsCodec = nullptr; + + QStringDecoder toUnicode; QVector m_advancedOptionsCombos; #endif }; @@ -434,7 +435,11 @@ bool QPrintPropertiesDialog::createAdvancedOptionsWidget() ppd_file_t *ppd = qvariant_cast(m_currentPrintDevice->property(PDPK_PpdFile)); if (ppd) { - m_cupsCodec = QTextCodec::codecForName(ppd->lang_encoding); + toUnicode = QStringDecoder(ppd->lang_encoding, QStringDecoder::Flag::Stateless); + if (!toUnicode.isValid()) { + qWarning() << "QPrinSupport: Cups uses unsupported encoding" << ppd->lang_encoding; + toUnicode = QStringDecoder(QStringDecoder::Utf8, QStringDecoder::Flag::Stateless); + } QWidget *holdingWidget = new QWidget(); QVBoxLayout *layout = new QVBoxLayout(holdingWidget); @@ -471,7 +476,7 @@ bool QPrintPropertiesDialog::createAdvancedOptionsWidget() if (choiceIsInstallableConflict && static_cast(choice->marked) == 1) { markedChoiceNotAvailable = true; } else if (!choiceIsInstallableConflict) { - choicesCb->addItem(m_cupsCodec->toUnicode(choice->text), i); + choicesCb->addItem(toUnicode(choice->text), i); if (static_cast(choice->marked) == 1) { choicesCb->setCurrentIndex(choicesCb->count() - 1); choicesCb->setProperty(ppdOriginallySelectedChoiceProperty, QVariant(i)); @@ -502,7 +507,7 @@ bool QPrintPropertiesDialog::createAdvancedOptionsWidget() choicesCbWithLabelLayout->addWidget(choicesCb); choicesCbWithLabelLayout->addWidget(warningLabel); - QLabel *optionLabel = new QLabel(m_cupsCodec->toUnicode(option->text)); + QLabel *optionLabel = new QLabel(toUnicode(option->text)); groupLayout->addRow(optionLabel, choicesCbWithLabel); anyWidgetCreated = true; choicesCb->setProperty(ppdOptionProperty, QVariant::fromValue(option)); @@ -515,7 +520,7 @@ bool QPrintPropertiesDialog::createAdvancedOptionsWidget() } if (groupLayout->rowCount() > 0) { - QGroupBox *groupBox = new QGroupBox(m_cupsCodec->toUnicode(group->text)); + QGroupBox *groupBox = new QGroupBox(toUnicode(group->text)); groupBox->setLayout(groupLayout); layout->addWidget(groupBox); } else { @@ -528,9 +533,6 @@ bool QPrintPropertiesDialog::createAdvancedOptionsWidget() widget.scrollArea->setWidget(holdingWidget); } - if (!m_cupsCodec) - m_cupsCodec = QTextCodec::codecForLocale(); - return anyWidgetCreated; } -- cgit v1.2.3