diff --git a/sane/scanner.cpp b/sane/scanner.cpp index 751d1d4..8479e52 100644 --- a/sane/scanner.cpp +++ b/sane/scanner.cpp @@ -621,14 +621,32 @@ void scanner::apply_config(void) } void scanner::on_ui_event(int uev, void* sender) { + bool indicator = sender == indicator_.get(); + if (uev == SANE_EVENT_SCAN_FINISHED || uev == SANE_EVENT_UI_CLOSE_NORMAL || uev == SANE_EVENT_UI_CLOSE_CANCEL) + { + if (indicator) + indicator_.reset(); + + if (err_ && setting_.get()) + { + return; + } + is_scanning_ = false; + } + int(__stdcall * h)(int, void*) = scanner_ev_handler_; if (h) { + if (SANE_EVENT_UI_CLOSE_SETTING == uev) + { + is_scanning_ = false; + setting_.reset(); + } + h(uev, evh_param_); return; } - bool indicator = sender == indicator_.get(); if (prev_start_result_ != SANE_STATUS_GOOD && indicator) indicator_.reset(); else @@ -2174,7 +2192,6 @@ COM_API_IMPLEMENT(scanner, int, start(void)) } COM_API_IMPLEMENT(scanner, int, stop(void)) { - scanner_ev_handler_ = NULL; return hg_sane_middleware::instance()->stop(handle_); } COM_API_IMPLEMENT(scanner, int, get_event(void)) @@ -2742,7 +2759,7 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len) } on_ui_event(ev_code, (void*)ev_code); } - is_scanning_ = false; + // is_scanning_ = false; { wchar_t msg[128] = { 0 };