diff --git a/kstars/ekos/align/align.cpp b/kstars/ekos/align/align.cpp --- a/kstars/ekos/align/align.cpp +++ b/kstars/ekos/align/align.cpp @@ -2715,7 +2715,9 @@ if (targetPosition > 0 && targetPosition != currentFilterPosition) { filterPositionPending = true; - filterManager->setFilterPosition(targetPosition); + // Disabling the autofocus policy for align. + filterManager->setFilterPosition( + targetPosition, FilterManager::NO_AUTOFOCUS_POLICY); state = ALIGN_PROGRESS; return true; } diff --git a/kstars/ekos/auxiliary/filtermanager.h b/kstars/ekos/auxiliary/filtermanager.h --- a/kstars/ekos/auxiliary/filtermanager.h +++ b/kstars/ekos/auxiliary/filtermanager.h @@ -41,7 +41,8 @@ CHANGE_POLICY = 1 << 0, OFFSET_POLICY = 1 << 1, AUTOFOCUS_POLICY = 1 << 2, - ALL_POLICIES = CHANGE_POLICY | OFFSET_POLICY | AUTOFOCUS_POLICY + ALL_POLICIES = CHANGE_POLICY | OFFSET_POLICY | AUTOFOCUS_POLICY, + NO_AUTOFOCUS_POLICY = CHANGE_POLICY | OFFSET_POLICY } FilterPolicy; FilterManager(); diff --git a/kstars/ekos/capture/capture.h b/kstars/ekos/capture/capture.h --- a/kstars/ekos/capture/capture.h +++ b/kstars/ekos/capture/capture.h @@ -900,6 +900,7 @@ FocusState focusState { FOCUS_IDLE }; GuideState guideState { GUIDE_IDLE }; AlignState alignState { ALIGN_IDLE }; + FilterState filterManagerState { FILTER_IDLE }; PauseFunctionPointer pauseFunction; diff --git a/kstars/ekos/capture/capture.cpp b/kstars/ekos/capture/capture.cpp --- a/kstars/ekos/capture/capture.cpp +++ b/kstars/ekos/capture/capture.cpp @@ -1936,7 +1936,30 @@ abort(); return; } + // This test must be placed before the FOCUS_PROGRESS test, + // as sometimes the FilterManager can cause an auto-focus. + // If the filterManager is not IDLE, then try again in 1 second. + switch (filterManagerState) + { + case FILTER_IDLE: + secondsLabel->clear(); + break; + + case FILTER_AUTOFOCUS: + secondsLabel->setText(i18n("Focusing...")); + QTimer::singleShot(1000, this, &Ekos::Capture::captureImage); + return; + + case FILTER_CHANGE: + secondsLabel->setText(i18n("Changing Filters...")); + QTimer::singleShot(1000, this, &Ekos::Capture::captureImage); + return; + case FILTER_OFFSET: + secondsLabel->setText(i18n("Adjusting Filter Offset...")); + QTimer::singleShot(1000, this, &Ekos::Capture::captureImage); + return; + } if (focusState >= FOCUS_PROGRESS) { appendLogText(i18n("Cannot capture while focus module is busy.")); @@ -2065,6 +2088,7 @@ case SequenceJob::CAPTURE_FILTER_BUSY: // Try again in 1 second if filter is busy + secondsLabel->setText(i18n("Changing filter...")); QTimer::singleShot(1000, this, &Ekos::Capture::captureImage); break; @@ -6192,6 +6216,7 @@ connect(filterManager.data(), &FilterManager::newStatus, [this](Ekos::FilterState filterState) { + filterManagerState = filterState; if (m_State == CAPTURE_CHANGING_FILTER) { secondsLabel->setText(Ekos::getFilterStatusString(filterState));