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.

Pick-to: 6.8
Fixes: QTBUG-112346
Change-Id: Idc1a3154055a425967596d66f26477e41b0b138b
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: David Faure <david.faure@kdab.com>
This commit is contained in:
Jonathan Marten 2024-12-02 13:23:19 +00:00
parent 3d7dd0c9ff
commit ec7589fc9b

View File

@ -991,13 +991,16 @@ void QPrintDialog::accept()
{
Q_D(QPrintDialog);
#if QT_CONFIG(cups) && QT_CONFIG(messagebox)
if (d->options.pagesRadioButton->isChecked() && printer()->pageRanges().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()),
QMessageBox::Ok, QMessageBox::Ok);
return;
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(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"),