Veto window closure during scanner discovery in the background.

This commit is contained in:
Saleem Edah-Tally
2025-07-13 20:24:50 +02:00
parent 0f286efe4c
commit c10aac922d
6 changed files with 46 additions and 7 deletions

View File

@@ -422,10 +422,9 @@ void XInsaneWidget::Setup(wxConfig * config, TimeredStatusBar * sb)
btnScan->Enable(false);
btnScan->Bind ( wxEVT_RIGHT_UP, &XInsaneWidget::OnBtnScanRightClick, this );
btnScan->Bind ( wxEVT_LEFT_UP, &XInsaneWidget::OnBtnScanClick, this );
m_backgroundScannerDiscoveryEvh = std::make_unique<BackgroundScannerDiscoveryEVH>(this);
BackgroundScannerDiscovery * backgroundDiscovery = new BackgroundScannerDiscovery ( m_scannerWidget.get(),
m_backgroundScannerDiscoveryEvh.get());
backgroundDiscovery->Run();
m_backgroundDiscovery = new BackgroundScannerDiscovery ( m_scannerWidget.get(),
new BackgroundScannerDiscoveryEVH(this)); // Takes ownership.
m_backgroundDiscovery->Run();
}
@@ -581,5 +580,14 @@ void XInsaneWidget::CancelScanning()
void XInsaneWidget::EnableScanButton(bool enable)
{
// Called from BackgroundScannerDiscoveryEVH::Done() only;
btnScan->Enable(enable);
m_backgroundDiscovery = nullptr;
}
bool XInsaneWidget::IsScannerDiscoveryRunning()
{
if (!m_backgroundDiscovery)
return false;
return m_backgroundDiscovery->IsRunning();
}

View File

@@ -23,7 +23,7 @@
#include <memory>
#include <vector>
class BackgroundScannerDiscoveryEVH;
class BackgroundScannerDiscovery; // Is a wxThread.
class ScanProjectHandler; // An event handler extending InsaneWorkerEvent.
class XStampWidget;
struct StampDescriptor;
@@ -66,6 +66,7 @@ public:
void CancelScanning();
void EnableScanButton(bool enable); // For CallAfter.
void Setup(wxConfig * config, TimeredStatusBar * sb);
bool IsScannerDiscoveryRunning();
private:
wxConfig * m_config;
wxWeakRef<TimeredStatusBar> m_sb;
@@ -81,7 +82,7 @@ private:
// Available devices and minimal options.
std::unique_ptr<XScannerWidget> m_scannerWidget;
std::unique_ptr<InsaneWorker> m_insaneWorker;
std::unique_ptr<BackgroundScannerDiscoveryEVH> m_backgroundScannerDiscoveryEvh;
BackgroundScannerDiscovery * m_backgroundDiscovery;
std::unique_ptr<ScanProjectHandler> m_scanProject;
bool m_doubleSided = false;

View File

@@ -311,7 +311,10 @@ wxThread::ExitCode BackgroundScannerDiscovery::Entry()
evt.SetShow ( true );
m_owner->OnActivated ( evt );
if (m_evh)
{
m_evh->OnDone();
wxDELETE(m_evh);
}
}
return ( wxThread::ExitCode ) 0;
}
@@ -321,3 +324,5 @@ wxThread::ExitCode BackgroundScannerDiscovery::Entry()
void BackgroundScannerDiscoveryEvent::OnDone()
{}
BackgroundScannerDiscoveryEvent::~BackgroundScannerDiscoveryEvent() = default;

View File

@@ -99,7 +99,7 @@ public:
BackgroundScannerDiscovery ( XScannerWidget * owner, BackgroundScannerDiscoveryEvent * evh )
{
m_owner = owner;
m_evh = evh;
m_evh = evh; // Owned here.
}
virtual ~BackgroundScannerDiscovery() {};
virtual ExitCode Entry();
@@ -112,6 +112,7 @@ class BackgroundScannerDiscoveryEvent
{
public:
virtual void OnDone();
virtual ~BackgroundScannerDiscoveryEvent();
};