Unix printing: Check for a valid page range before accepting dialog

QPrintDialog::accept() checks for valid page ranges if the "Pages"
option is selected, but it did that before calling setupPrinter() to
read the settings from the user input. The page ranges would not yet
have been parsed at this point, so giving the error message whenever
this option is used even if a valid page range string is entered.

Perform an equivalent check before the dialog is accepted: that is,
that the entered page range string is not empty and that it can be
parsed to a valid QPageRanges.

Fixes: QTBUG-112346
Change-Id: Idc1a3154055a425967596d66f26477e41b0b138b
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: David Faure <david.faure@kdab.com>
(cherry picked from commit ec7589fc9b0855c789dc4d5d5558b476a7873d45)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Jonathan Marten 2024-12-02 13:23:19 +00:00 committed by Qt Cherry-pick Bot
parent 8a63c9b438
commit 80e50e169d

View File

@ -991,14 +991,17 @@ void QPrintDialog::accept()
{
Q_D(QPrintDialog);
#if QT_CONFIG(cups) && QT_CONFIG(messagebox)
if (d->options.pagesRadioButton->isChecked() && printer()->pageRanges().isEmpty()) {
if (d->options.pagesRadioButton->isChecked()) {
const QString rangesText = d->options.pagesLineEdit->text();
if (rangesText.isEmpty() || QPageRanges::fromString(rangesText).isEmpty()) {
QMessageBox::critical(this, tr("Invalid Pages Definition"),
tr("%1 does not follow the correct syntax. Please use ',' to separate "
"ranges and pages, '-' to define ranges and make sure ranges do "
"not intersect with each other.").arg(d->options.pagesLineEdit->text()),
"not intersect with each other.").arg(rangesText),
QMessageBox::Ok, QMessageBox::Ok);
return;
}
}
if (d->top->d->m_duplexPpdOption && d->top->d->m_duplexPpdOption->conflicted) {
const QMessageBox::StandardButton answer = QMessageBox::warning(this, tr("Duplex Settings Conflicts"),
tr("There are conflicts in duplex settings. Do you want to fix them?"),