sane.ds: Revise the logic around processing events to reflect the need for us to generate and post a message to drive Sane events.

This commit is contained in:
Jeremy White 2009-02-09 13:02:28 -06:00 committed by Alexandre Julliard
parent b0ec8880e2
commit 0cab16c647
3 changed files with 26 additions and 24 deletions

View File

@ -292,31 +292,26 @@ TW_UINT16 SANE_FileSystemRename (pTW_IDENTITY pOrigin,
TW_UINT16 SANE_ProcessEvent (pTW_IDENTITY pOrigin,
TW_MEMREF pData)
{
TW_UINT16 twRC = TWRC_SUCCESS;
TW_UINT16 twRC = TWRC_NOTDSEVENT;
pTW_EVENT pEvent = (pTW_EVENT) pData;
MSG *pMsg = pEvent->pEvent;
TRACE("DG_CONTROL/DAT_EVENT/MSG_PROCESSEVENT\n");
TRACE("DG_CONTROL/DAT_EVENT/MSG_PROCESSEVENT msg 0x%x, wParam 0x%lx\n", pMsg->message, pMsg->wParam);
activeDS.twCC = TWCC_SUCCESS;
if (pMsg->message == activeDS.windowMessage && activeDS.windowMessage)
{
twRC = TWRC_DSEVENT;
pEvent->TWMessage = pMsg->wParam;
}
else
pEvent->TWMessage = MSG_NULL; /* no message to the application */
if (activeDS.currentState < 5 || activeDS.currentState > 7)
{
twRC = TWRC_FAILURE;
activeDS.twCC = TWCC_SEQERROR;
}
else
{
if (activeDS.pendingEvent.TWMessage != MSG_NULL)
{
pEvent->TWMessage = activeDS.pendingEvent.TWMessage;
activeDS.pendingEvent.TWMessage = MSG_NULL;
twRC = TWRC_NOTDSEVENT;
}
else
{
pEvent->TWMessage = MSG_NULL; /* no message to the application */
twRC = TWRC_NOTDSEVENT;
}
activeDS.twCC = TWCC_SUCCESS;
}
return twRC;
}
@ -355,7 +350,8 @@ TW_UINT16 SANE_PendingXfersEndXfer (pTW_IDENTITY pOrigin,
{
activeDS.currentState = 5;
/* Notify the application that it can close the data source */
activeDS.pendingEvent.TWMessage = MSG_CLOSEDSREQ;
if (activeDS.windowMessage)
PostMessageA(activeDS.hwndOwner, activeDS.windowMessage, MSG_CLOSEDSREQ, 0);
}
twRC = TWRC_SUCCESS;
activeDS.twCC = TWCC_SUCCESS;
@ -578,6 +574,8 @@ TW_UINT16 SANE_EnableDSUserInterface (pTW_IDENTITY pOrigin,
else
{
activeDS.hwndOwner = pUserInterface->hParent;
if (! activeDS.windowMessage)
activeDS.windowMessage = RegisterWindowMessageA("SANE.DS ACTIVITY MESSAGE");
if (pUserInterface->ShowUI)
{
BOOL rc;
@ -586,7 +584,8 @@ TW_UINT16 SANE_EnableDSUserInterface (pTW_IDENTITY pOrigin,
rc = DoScannerUI();
if (!rc)
{
activeDS.pendingEvent.TWMessage = MSG_CLOSEDSREQ;
if (activeDS.windowMessage)
PostMessageA(activeDS.hwndOwner, activeDS.windowMessage, MSG_CLOSEDSREQ, 0);
}
#ifdef SONAME_LIBSANE
else
@ -599,8 +598,9 @@ TW_UINT16 SANE_EnableDSUserInterface (pTW_IDENTITY pOrigin,
else
{
/* no UI will be displayed, so source is ready to transfer data */
activeDS.pendingEvent.TWMessage = MSG_XFERREADY;
activeDS.currentState = 6; /* Transitions to state 6 directly */
if (activeDS.windowMessage)
PostMessageA(activeDS.hwndOwner, activeDS.windowMessage, MSG_XFERREADY, 0);
}
activeDS.hwndOwner = pUserInterface->hParent;

View File

@ -48,6 +48,7 @@ MAKE_FUNCPTR(sane_strstatus)
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "twain.h"
extern HINSTANCE SANE_instance;
@ -58,8 +59,7 @@ struct tagActiveDS
struct tagActiveDS *next; /* next active DS */
TW_IDENTITY identity; /* identity */
TW_UINT16 currentState; /* current state */
TW_EVENT pendingEvent; /* pending event to be sent to
application */
UINT windowMessage; /* message to use to send status */
TW_UINT16 twCC; /* condition code */
HWND hwndOwner; /* window handle of the app */
HWND progressWnd; /* window handle of the scanning window */

View File

@ -996,11 +996,13 @@ static INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
if (psn->lParam == TRUE)
{
activeDS.currentState = 6;
activeDS.pendingEvent.TWMessage = MSG_XFERREADY;
if (activeDS.windowMessage)
PostMessageA(activeDS.hwndOwner, activeDS.windowMessage, MSG_XFERREADY, 0);
}
break;
case PSN_QUERYCANCEL:
activeDS.pendingEvent.TWMessage = MSG_CLOSEDSREQ;
if (activeDS.windowMessage)
PostMessageA(activeDS.hwndOwner, activeDS.windowMessage, MSG_CLOSEDSREQ, 0);
break;
case PSN_SETACTIVE:
InitializeDialog(hwndDlg);