diff --git a/src/skanlite.h b/src/skanlite.h --- a/src/skanlite.h +++ b/src/skanlite.h @@ -71,6 +71,7 @@ void saveScannerOptions(); void defaultScannerOptions(); + void applyScannerOptions(const QMap &opts); void availableDevices(const QList &deviceList); @@ -101,7 +102,8 @@ ShowImageDialog *m_showImgDialog = nullptr; SaveLocation *m_saveLocation = nullptr; QString m_deviceName; - QMap m_defaultScanOpts; + QMap m_defaultScanOpts; + QMap m_pendingApplyScanOpts; QImage m_img; QByteArray m_data; int m_width; diff --git a/src/skanlite.cpp b/src/skanlite.cpp --- a/src/skanlite.cpp +++ b/src/skanlite.cpp @@ -77,6 +77,11 @@ connect(m_ksanew, &KSaneWidget::availableDevices, this, &Skanlite::availableDevices); connect(m_ksanew, &KSaneWidget::userMessage, this, &Skanlite::alertUser); connect(m_ksanew, &KSaneWidget::buttonPressed, this, &Skanlite::buttonPressed); + connect(m_ksanew, &KSaneWidget::scanDone, [this](){ + if (!m_pendingApplyScanOpts.isEmpty()) { + applyScannerOptions(m_pendingApplyScanOpts); + } + }); m_imageSaver = new KSaneImageSaver(this); connect(m_imageSaver, &KSaneImageSaver::imageSaved, this, &Skanlite::imageSaved); @@ -643,7 +648,16 @@ return; } - m_ksanew->setOptVals(m_defaultScanOpts); + applyScannerOptions(m_defaultScanOpts); +} + +void Skanlite::applyScannerOptions(const QMap &opts) +{ + if (m_ksanew->setOptVals(opts) == -1) { + m_pendingApplyScanOpts = opts; + } else { + m_pendingApplyScanOpts.clear(); + } } void Skanlite::loadScannerOptions() @@ -657,7 +671,7 @@ QMap opts; readScannerOptions(QString::fromLatin1("Options For %1").arg(m_deviceName), opts); - m_ksanew->setOptVals(opts); + applyScannerOptions(opts); } void Skanlite::availableDevices(const QList &deviceList) @@ -750,7 +764,7 @@ QMap opts; deserializeScannerOptions(options, opts); processSelectionOptions(opts, ignoreSelection); - m_ksanew->setOptVals(opts); + applyScannerOptions(opts); } @@ -779,7 +793,7 @@ } processSelectionOptions(opts, ignoreSelection); - m_ksanew->setOptVals(opts); + applyScannerOptions(opts); } void Skanlite::getDeviceName()