From: Jacek Caban Subject: [PATCH 2/2] atl100: Added AtlWaitWithMessageLoop implementation Message-Id: <50EEB399.6080007@codeweavers.com> Date: Thu, 10 Jan 2013 13:27:05 +0100 --- dlls/atl/atl.spec | 2 +- dlls/atl100/atl.c | 28 ++++++++++++++++++++++++++++ dlls/atl100/atl100.spec | 2 +- dlls/atl80/atl80.spec | 2 +- include/atlbase.h | 1 + 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/dlls/atl/atl.spec b/dlls/atl/atl.spec index 47ed135..cb071f5 100644 --- a/dlls/atl/atl.spec +++ b/dlls/atl/atl.spec @@ -16,7 +16,7 @@ 21 stdcall AtlModuleTerm(ptr) 22 stdcall AtlModuleUnregisterServer(ptr ptr) 23 stdcall AtlModuleUpdateRegistryFromResourceD(ptr wstr long ptr ptr) -24 stub AtlWaitWithMessageLoop +24 stdcall AtlWaitWithMessageLoop(long) atl100.AtlWaitWithMessageLoop 25 stub AtlSetErrorInfo 26 stdcall AtlCreateTargetDC(long ptr) atl100.AtlCreateTargetDC 27 stdcall AtlHiMetricToPixel(ptr ptr) atl100.AtlHiMetricToPixel diff --git a/dlls/atl100/atl.c b/dlls/atl100/atl.c index 61477ae..099513a 100644 --- a/dlls/atl100/atl.c +++ b/dlls/atl100/atl.c @@ -518,6 +518,34 @@ HRESULT WINAPI AtlRegisterClassCategoriesHelper(REFCLSID clsid, const struct _AT } /*********************************************************************** + * AtlWaitWithMessageLoop [atl100.24] + */ +BOOL WINAPI AtlWaitWithMessageLoop(HANDLE handle) +{ + MSG msg; + DWORD res; + + TRACE("(%p)\n", handle); + + while(1) { + res = MsgWaitForMultipleObjects(1, &handle, FALSE, INFINITE, QS_ALLINPUT); + switch(res) { + case WAIT_OBJECT_0: + return TRUE; + case WAIT_OBJECT_0+1: + if(GetMessageW(&msg, NULL, 0, 0) < 0) + return FALSE; + + TranslateMessage(&msg); + DispatchMessageW(&msg); + break; + default: + return FALSE; + } + } +} + +/*********************************************************************** * AtlGetVersion [atl100.@] */ DWORD WINAPI AtlGetVersion(void *pReserved) diff --git a/dlls/atl100/atl100.spec b/dlls/atl100/atl100.spec index 0c27070..b30b839 100644 --- a/dlls/atl100/atl100.spec +++ b/dlls/atl100/atl100.spec @@ -8,7 +8,7 @@ 20 stub AtlComModuleRevokeClassObjects 22 stub AtlComModuleUnregisterServer 23 stdcall AtlUpdateRegistryFromResourceD(long wstr long ptr ptr) -24 stub AtlWaitWithMessageLoop +24 stdcall AtlWaitWithMessageLoop(long) 25 stub AtlSetErrorInfo 26 stdcall AtlCreateTargetDC(long ptr) 27 stdcall AtlHiMetricToPixel(ptr ptr) diff --git a/dlls/atl80/atl80.spec b/dlls/atl80/atl80.spec index 5c5967e..7719257 100644 --- a/dlls/atl80/atl80.spec +++ b/dlls/atl80/atl80.spec @@ -10,7 +10,7 @@ 20 stub AtlComModuleRevokeClassObjects 22 stub AtlComModuleUnregisterServer 23 stdcall AtlUpdateRegistryFromResourceD(long wstr long ptr ptr) atl100.AtlUpdateRegistryFromResourceD -24 stub AtlWaitWithMessageLoop +24 stdcall AtlWaitWithMessageLoop(long) atl100.AtlWaitWithMessageLoop 25 stub AtlSetErrorInfo 26 stdcall AtlCreateTargetDC(long ptr) atl100.AtlCreateTargetDC 27 stdcall AtlHiMetricToPixel(ptr ptr) atl100.AtlHiMetricToPixel diff --git a/include/atlbase.h b/include/atlbase.h index 39c3741..d0dd96c 100644 --- a/include/atlbase.h +++ b/include/atlbase.h @@ -255,5 +255,6 @@ HRESULT WINAPI AtlLoadTypeLib(HINSTANCE,LPCOLESTR,BSTR*,ITypeLib**); HRESULT WINAPI AtlRegisterTypeLib(HINSTANCE,LPCOLESTR); HRESULT WINAPI AtlRegisterClassCategoriesHelper(REFCLSID,const struct _ATL_CATMAP_ENTRY*,BOOL); HRESULT WINAPI AtlComModuleGetClassObject(_ATL_COM_MODULE*,REFCLSID,REFIID,void**); +BOOL WINAPI AtlWaitWithMessageLoop(HANDLE); #endif /* __WINE_ATLBASE_H__ */