Veto window closure during scanner discovery in the background.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user