diff --git a/src/ksanewidget.cpp b/src/ksanewidget.cpp --- a/src/ksanewidget.cpp +++ b/src/ksanewidget.cpp @@ -712,6 +712,11 @@ int i; int ret = 0; + if (d->m_previewThread->isRunning() || d->m_scanThread->isRunning()) { + d->m_settingsChangePending.reset(new QMap(opts)); + return ret; + } + for (i = 0; i < d->m_optList.size(); i++) { if (opts.contains(d->m_optList.at(i)->name())) { tmp = opts[d->m_optList.at(i)->name()]; @@ -758,6 +763,13 @@ { KSaneOption *opt; + if (d->m_previewThread->isRunning() || d->m_scanThread->isRunning()) { + QMap* opts_copy = new QMap(); + (*opts_copy)[option] = value; + d->m_settingsChangePending.reset(opts_copy); + return false; + } + if ((opt = d->getOption(option)) != nullptr) { if (opt->setValue(value)) { if ((d->m_splitGamChB) && diff --git a/src/ksanewidget_p.h b/src/ksanewidget_p.h --- a/src/ksanewidget_p.h +++ b/src/ksanewidget_p.h @@ -43,6 +43,7 @@ #include #include #include +#include #include "ksanewidget.h" #include "ksaneoption.h" @@ -181,6 +182,7 @@ QTimer m_optionPollTmr; KSaneScanThread *m_scanThread; KSanePreviewThread *m_previewThread; + QScopedPointer > m_settingsChangePending; QString m_saneUserName; QString m_sanePassword; diff --git a/src/ksanewidget_p.cpp b/src/ksanewidget_p.cpp --- a/src/ksanewidget_p.cpp +++ b/src/ksanewidget_p.cpp @@ -1076,6 +1076,10 @@ m_optionPollTmr.start(); } emit(q->scanProgress(100)); + + if (m_settingsChangePending) { + q->setOptVals(*m_settingsChangePending.take()); + } } m_optsTabWidget->setDisabled(busy);