Index: dll/win32/msimtf/activeimmapp.c =================================================================== --- dll/win32/msimtf/activeimmapp.c (revision 68246) +++ dll/win32/msimtf/activeimmapp.c (working copy) @@ -22,6 +22,7 @@ typedef struct tagActiveIMMApp { IActiveIMMApp IActiveIMMApp_iface; + IActiveIMMMessagePumpOwner IActiveIMMMessagePumpOwner_iface; LONG refCount; } ActiveIMMApp; @@ -46,6 +47,10 @@ { *ppvOut = This; } + else if (IsEqualIID(iid, &IID_IActiveIMMMessagePumpOwner)) + { + *ppvOut = &This->IActiveIMMMessagePumpOwner_iface; + } if (*ppvOut) { @@ -792,6 +797,80 @@ ActiveIMMApp_EnumInputContext }; +static inline ActiveIMMApp *impl_from_IActiveIMMMessagePumpOwner(IActiveIMMMessagePumpOwner *iface) +{ + return CONTAINING_RECORD(iface, ActiveIMMApp, IActiveIMMMessagePumpOwner_iface); +} + +static HRESULT WINAPI ActiveIMMApp_IActiveIMMMessagePumpOwner_QueryInterface(IActiveIMMMessagePumpOwner* iface, + REFIID iid, LPVOID *ppvOut) +{ + ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); + return IActiveIMMApp_QueryInterface(&This->IActiveIMMApp_iface, iid, ppvOut); +} + +static ULONG WINAPI ActiveIMMApp_IActiveIMMMessagePumpOwner_AddRef(IActiveIMMMessagePumpOwner* iface) +{ + ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); + return IActiveIMMApp_AddRef(&This->IActiveIMMApp_iface); +} + +static ULONG WINAPI ActiveIMMApp_IActiveIMMMessagePumpOwner_Release(IActiveIMMMessagePumpOwner* iface) +{ + ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); + return IActiveIMMApp_Release(&This->IActiveIMMApp_iface); +} + +static HRESULT WINAPI ActiveIMMApp_IActiveIMMMessagePumpOwner_Start(IActiveIMMMessagePumpOwner* iface) +{ + ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); + FIXME("(%p)->(): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI ActiveIMMApp_IActiveIMMMessagePumpOwner_End(IActiveIMMMessagePumpOwner* iface) +{ + ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); + FIXME("(%p)->(): stub\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI ActiveIMMApp_IActiveIMMMessagePumpOwner_OnTranslateMessage(IActiveIMMMessagePumpOwner* iface, + const struct tagMSG *msg) +{ + ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); + FIXME("(%p)->(%p): stub\n", This, msg); + return E_NOTIMPL; +} + +static HRESULT WINAPI ActiveIMMApp_IActiveIMMMessagePumpOwner_Pause(IActiveIMMMessagePumpOwner* iface, + DWORD *pcookie) +{ + ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); + FIXME("(%p)->(%p): stub\n", This, pcookie); + return E_NOTIMPL; +} + +static HRESULT WINAPI ActiveIMMApp_IActiveIMMMessagePumpOwner_Resume(IActiveIMMMessagePumpOwner* iface, + DWORD cookie) +{ + ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); + FIXME("(%p)->(%u): stub\n", This, cookie); + return E_NOTIMPL; +} + +static const IActiveIMMMessagePumpOwnerVtbl ActiveIMMApp_IActiveIMMMessagePumpOwnerVtbl = +{ + ActiveIMMApp_IActiveIMMMessagePumpOwner_QueryInterface, + ActiveIMMApp_IActiveIMMMessagePumpOwner_AddRef, + ActiveIMMApp_IActiveIMMMessagePumpOwner_Release, + ActiveIMMApp_IActiveIMMMessagePumpOwner_Start, + ActiveIMMApp_IActiveIMMMessagePumpOwner_End, + ActiveIMMApp_IActiveIMMMessagePumpOwner_OnTranslateMessage, + ActiveIMMApp_IActiveIMMMessagePumpOwner_Pause, + ActiveIMMApp_IActiveIMMMessagePumpOwner_Resume, +}; + DECLSPEC_HIDDEN HRESULT ActiveIMMApp_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut) { ActiveIMMApp *This; @@ -803,6 +882,7 @@ return E_OUTOFMEMORY; This->IActiveIMMApp_iface.lpVtbl = &ActiveIMMAppVtbl; + This->IActiveIMMMessagePumpOwner_iface.lpVtbl = &ActiveIMMApp_IActiveIMMMessagePumpOwnerVtbl; This->refCount = 1; TRACE("returning %p\n",This); Index: include/psdk/dimm.idl =================================================================== --- include/psdk/dimm.idl (revision 68246) +++ include/psdk/dimm.idl (working copy) @@ -581,6 +581,21 @@ } [ + object, + uuid(b5cf2cfa-8aeb-11d1-9364-0060b067b86e), + pointer_default(unique), + local +] +interface IActiveIMMMessagePumpOwner : IUnknown +{ + HRESULT Start(); + HRESULT End(); + HRESULT OnTranslateMessage([in] const struct tagMSG *pMsg); + HRESULT Pause([out] DWORD *pwdCookie); + HRESULT Resume([in] DWORD dwCookie); +} + +[ uuid(4955dd33-b159-11d0-8fcf-00aa006bcc59) ] coclass CActiveIMM @@ -588,6 +603,6 @@ [default] interface IActiveIMMApp; /* interface IActiveIMMIME; */ /* interface IActiveIMMRegistrar; */ - /* interface IActiveIMMMessagePumpOwner; */ + interface IActiveIMMMessagePumpOwner; }