[PATCH v3 2/4] riched20: Add stub for ITextDocument2Old interface.

Huw Davies huw at codeweavers.com
Mon Sep 17 03:07:08 CDT 2018


On Thu, Sep 13, 2018 at 04:15:10PM +0800, Jactry Zeng wrote:
> Superseded patch 151076.
> 
> Signed-off-by: Jactry Zeng <jzeng at codeweavers.com>
> ---
>  dlls/riched20/editor.h        |   2 +-
>  dlls/riched20/richole.c       | 445 ++++++++++++++++++++++++----------
>  dlls/riched20/tests/richole.c |   9 +
>  dlls/riched20/txtsrv.c        |   2 +-
>  4 files changed, 325 insertions(+), 133 deletions(-)
> 
> diff --git a/dlls/riched20/editor.h b/dlls/riched20/editor.h
> index 141c63aca9..eba6d35fc7 100644
> --- a/dlls/riched20/editor.h
> +++ b/dlls/riched20/editor.h
> @@ -233,7 +233,7 @@ void ME_DrawOLE(ME_Context *c, int x, int y, ME_Run* run, BOOL selected) DECLSPE
>  void ME_GetOLEObjectSize(const ME_Context *c, ME_Run *run, SIZE *pSize) DECLSPEC_HIDDEN;
>  void ME_CopyReObject(REOBJECT *dst, const REOBJECT *src, DWORD flags) DECLSPEC_HIDDEN;
>  void ME_DeleteReObject(struct re_object *re_object) DECLSPEC_HIDDEN;
> -void ME_GetITextDocumentInterface(IRichEditOle *iface, LPVOID *ppvObj) DECLSPEC_HIDDEN;
> +void ME_GetITextDocument2OldInterface(IRichEditOle *iface, LPVOID *ppvObj) DECLSPEC_HIDDEN;
>  
>  /* editor.c */
>  ME_TextEditor *ME_MakeEditor(ITextHost *texthost, BOOL bEmulateVersion10) DECLSPEC_HIDDEN;
> diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c
> index 11b9920b57..8d43ce6ce1 100644
> --- a/dlls/riched20/richole.c
> +++ b/dlls/riched20/richole.c
> @@ -46,6 +46,7 @@ DEFINE_GUID(IID_ITextServices, 0x8d33f740, 0xcf58, 0x11ce, 0xa8, 0x9d, 0x00, 0xa
>  DEFINE_GUID(IID_ITextHost, 0x13e670f4,0x1a5a,0x11cf,0xab,0xeb,0x00,0xaa,0x00,0xb6,0x5e,0xa1);
>  DEFINE_GUID(IID_ITextHost2, 0x13e670f5,0x1a5a,0x11cf,0xab,0xeb,0x00,0xaa,0x00,0xb6,0x5e,0xa1);
>  DEFINE_GUID(IID_ITextDocument, 0x8cc497c0, 0xa1df, 0x11ce, 0x80, 0x98, 0x00, 0xaa, 0x00, 0x47, 0xbe, 0x5d);
> +DEFINE_GUID(IID_ITextDocument2Old, 0x01c25500, 0x4268, 0x11d1, 0x88, 0x3a, 0x3c, 0x8b, 0x00, 0xc1, 0x00, 0x00);
>  DEFINE_GUID(IID_ITextRange, 0x8cc497c2, 0xa1df, 0x11ce, 0x80, 0x98, 0x00, 0xaa, 0x00, 0x47, 0xbe, 0x5d);
>  DEFINE_GUID(IID_ITextSelection, 0x8cc497c1, 0xa1df, 0x11ce, 0x80, 0x98, 0x00, 0xaa, 0x00, 0x47, 0xbe, 0x5d);
>  DEFINE_GUID(IID_ITextFont, 0x8cc497c3, 0xa1df, 0x11ce, 0x80, 0x98, 0x00, 0xaa, 0x00, 0x47, 0xbe, 0x5d);
> @@ -55,7 +56,7 @@ static ITypeLib *typelib;
>  
>  enum tid_t {
>      NULL_tid,
> -    ITextDocument_tid,
> +    ITextDocument2Old_tid,
>      ITextRange_tid,
>      ITextSelection_tid,
>      ITextFont_tid,
> @@ -66,7 +67,7 @@ enum tid_t {
>  static const IID * const tid_ids[] =
>  {
>      &IID_NULL,
> -    &IID_ITextDocument,
> +    &IID_ITextDocument2Old,

This won't work because the ITextDocument2Old typeinfo doesn't yet
exist---you'll have to add it manually to riched_tom.idl .  The whole
thing seems a bit of a mess unfortunately!

Could you add some tests for ITextDocument2Old_GetTypeInfo while
you're at it?


>      &IID_ITextRange,
>      &IID_ITextSelection,
>      &IID_ITextFont,
> @@ -208,7 +209,7 @@ enum range_update_op {
>  typedef struct IRichEditOleImpl {
>      IUnknown IUnknown_inner;
>      IRichEditOle IRichEditOle_iface;
> -    ITextDocument ITextDocument_iface;
> +    ITextDocument2Old ITextDocument2Old_iface;
>      IUnknown *outer_unk;
>      LONG ref;
>  
> @@ -267,9 +268,9 @@ static inline IRichEditOleImpl *impl_from_IRichEditOle(IRichEditOle *iface)
>      return CONTAINING_RECORD(iface, IRichEditOleImpl, IRichEditOle_iface);
>  }
>  
> -static inline IRichEditOleImpl *impl_from_ITextDocument(ITextDocument *iface)
> +static inline IRichEditOleImpl *impl_from_ITextDocument2Old(ITextDocument2Old *iface)
>  {
> -    return CONTAINING_RECORD(iface, IRichEditOleImpl, ITextDocument_iface);
> +    return CONTAINING_RECORD(iface, IRichEditOleImpl, ITextDocument2Old_iface);
>  }
>  
>  static inline IRichEditOleImpl *impl_from_IUnknown(IUnknown *iface)
> @@ -943,8 +944,8 @@ static HRESULT WINAPI IRichEditOleImpl_inner_fnQueryInterface(IUnknown *iface, R
>          *ppvObj = &This->IUnknown_inner;
>      else if (IsEqualGUID(riid, &IID_IRichEditOle))
>          *ppvObj = &This->IRichEditOle_iface;
> -    else if (IsEqualGUID(riid, &IID_ITextDocument))
> -        *ppvObj = &This->ITextDocument_iface;
> +    else if (IsEqualGUID(riid, &IID_ITextDocument) || IsEqualGUID(riid, &IID_ITextDocument2Old))
> +        *ppvObj = &This->ITextDocument2Old_iface;
>      if (*ppvObj)
>      {
>          IUnknown_AddRef((IUnknown *)*ppvObj);
> @@ -3859,76 +3860,71 @@ static HRESULT create_textpara(ITextRange *range, ITextPara **ret)
>  }
>  
>  /* ITextDocument */
> -static HRESULT WINAPI
> -ITextDocument_fnQueryInterface(ITextDocument* me, REFIID riid,
> -    void** ppvObject)
> +static HRESULT WINAPI ITextDocument2Old_fnQueryInterface(ITextDocument2Old* iface, REFIID riid,
> +                                                         void **ppvObject)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      return IRichEditOle_QueryInterface(&This->IRichEditOle_iface, riid, ppvObject);
>  }
>  
> -static ULONG WINAPI
> -ITextDocument_fnAddRef(ITextDocument* me)
> +static ULONG WINAPI ITextDocument2Old_fnAddRef(ITextDocument2Old *iface)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      return IRichEditOle_AddRef(&This->IRichEditOle_iface);
>  }
>  
> -static ULONG WINAPI
> -ITextDocument_fnRelease(ITextDocument* me)
> +static ULONG WINAPI ITextDocument2Old_fnRelease(ITextDocument2Old *iface)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      return IRichEditOle_Release(&This->IRichEditOle_iface);
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnGetTypeInfoCount(ITextDocument* me,
> -    UINT* pctinfo)
> +static HRESULT WINAPI ITextDocument2Old_fnGetTypeInfoCount(ITextDocument2Old *iface,
> +                                                           UINT *pctinfo)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      TRACE("(%p)->(%p)\n", This, pctinfo);
>      *pctinfo = 1;
>      return S_OK;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnGetTypeInfo(ITextDocument* me, UINT iTInfo, LCID lcid,
> -    ITypeInfo** ppTInfo)
> +static HRESULT WINAPI ITextDocument2Old_fnGetTypeInfo(ITextDocument2Old *iface, UINT iTInfo, LCID lcid,
> +                                                      ITypeInfo **ppTInfo)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      HRESULT hr;
>  
>      TRACE("(%p)->(%u,%d,%p)\n", This, iTInfo, lcid, ppTInfo);
>  
> -    hr = get_typeinfo(ITextDocument_tid, ppTInfo);
> +    hr = get_typeinfo(ITextDocument2Old_tid, ppTInfo);
>      if (SUCCEEDED(hr))
>          ITypeInfo_AddRef(*ppTInfo);
>      return hr;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnGetIDsOfNames(ITextDocument* me, REFIID riid,
> -    LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId)
> +static HRESULT WINAPI ITextDocument2Old_fnGetIDsOfNames(ITextDocument2Old *iface, REFIID riid,
> +                                                        LPOLESTR *rgszNames, UINT cNames,
> +                                                        LCID lcid, DISPID *rgDispId)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      ITypeInfo *ti;
>      HRESULT hr;
>  
>      TRACE("(%p)->(%s, %p, %u, %d, %p)\n", This, debugstr_guid(riid),
>              rgszNames, cNames, lcid, rgDispId);
>  
> -    hr = get_typeinfo(ITextDocument_tid, &ti);
> +    hr = get_typeinfo(ITextDocument2Old_tid, &ti);
>      if (SUCCEEDED(hr))
>          hr = ITypeInfo_GetIDsOfNames(ti, rgszNames, cNames, rgDispId);
>      return hr;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnInvoke(ITextDocument* me, DISPID dispIdMember,
> -    REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,
> -    VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr)
> +static HRESULT WINAPI ITextDocument2Old_fnInvoke(ITextDocument2Old *iface, DISPID dispIdMember,
> +                                                 REFIID riid, LCID lcid, WORD wFlags,
> +                                                 DISPPARAMS *pDispParams, VARIANT *pVarResult,
> +                                                 EXCEPINFO *pExcepInfo, UINT *puArgErr)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      ITypeInfo *ti;
>      HRESULT hr;
>  
> @@ -3936,26 +3932,24 @@ ITextDocument_fnInvoke(ITextDocument* me, DISPID dispIdMember,
>              debugstr_guid(riid), lcid, wFlags, pDispParams, pVarResult,
>              pExcepInfo, puArgErr);
>  
> -    hr = get_typeinfo(ITextDocument_tid, &ti);
> +    hr = get_typeinfo(ITextDocument2Old_tid, &ti);
>      if (SUCCEEDED(hr))
> -        hr = ITypeInfo_Invoke(ti, me, dispIdMember, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
> +        hr = ITypeInfo_Invoke(ti, iface, dispIdMember, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
>      return hr;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnGetName(ITextDocument* me, BSTR* pName)
> +static HRESULT WINAPI ITextDocument2Old_fnGetName(ITextDocument2Old *iface, BSTR *pName)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnGetSelection(ITextDocument *me, ITextSelection **selection)
> +static HRESULT WINAPI ITextDocument2Old_fnGetSelection(ITextDocument2Old *iface, ITextSelection **selection)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>  
> -    TRACE("(%p)->(%p)\n", me, selection);
> +    TRACE("(%p)->(%p)\n", iface, selection);
>  
>      if (!selection)
>        return E_INVALIDARG;
> @@ -3973,125 +3967,110 @@ ITextDocument_fnGetSelection(ITextDocument *me, ITextSelection **selection)
>      return S_OK;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnGetStoryCount(ITextDocument* me, LONG* pCount)
> +static HRESULT WINAPI ITextDocument2Old_fnGetStoryCount(ITextDocument2Old *iface, LONG *pCount)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnGetStoryRanges(ITextDocument* me,
> -    ITextStoryRanges** ppStories)
> +static HRESULT WINAPI ITextDocument2Old_fnGetStoryRanges(ITextDocument2Old *iface,
> +                                                         ITextStoryRanges **ppStories)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnGetSaved(ITextDocument* me, LONG* pValue)
> +static HRESULT WINAPI ITextDocument2Old_fnGetSaved(ITextDocument2Old *iface, LONG *pValue)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnSetSaved(ITextDocument* me, LONG Value)
> +static HRESULT WINAPI ITextDocument2Old_fnSetSaved(ITextDocument2Old *iface, LONG Value)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnGetDefaultTabStop(ITextDocument* me, float* pValue)
> +static HRESULT WINAPI ITextDocument2Old_fnGetDefaultTabStop(ITextDocument2Old *iface, float *pValue)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnSetDefaultTabStop(ITextDocument* me, float Value)
> +static HRESULT WINAPI ITextDocument2Old_fnSetDefaultTabStop(ITextDocument2Old *iface, float Value)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnNew(ITextDocument* me)
> +static HRESULT WINAPI ITextDocument2Old_fnNew(ITextDocument2Old *iface)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnOpen(ITextDocument* me, VARIANT* pVar, LONG Flags,
> -    LONG CodePage)
> +static HRESULT WINAPI ITextDocument2Old_fnOpen(ITextDocument2Old *iface, VARIANT *pVar,
> +                                               LONG Flags, LONG CodePage)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnSave(ITextDocument* me, VARIANT* pVar, LONG Flags,
> -    LONG CodePage)
> +static HRESULT WINAPI ITextDocument2Old_fnSave(ITextDocument2Old *iface, VARIANT *pVar,
> +                                               LONG Flags, LONG CodePage)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnFreeze(ITextDocument* me, LONG* pCount)
> +static HRESULT WINAPI ITextDocument2Old_fnFreeze(ITextDocument2Old *iface, LONG *pCount)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnUnfreeze(ITextDocument* me, LONG* pCount)
> +static HRESULT WINAPI ITextDocument2Old_fnUnfreeze(ITextDocument2Old *iface, LONG *pCount)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnBeginEditCollection(ITextDocument* me)
> +static HRESULT WINAPI ITextDocument2Old_fnBeginEditCollection(ITextDocument2Old *iface)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnEndEditCollection(ITextDocument* me)
> +static HRESULT WINAPI ITextDocument2Old_fnEndEditCollection(ITextDocument2Old *iface)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnUndo(ITextDocument* me, LONG Count, LONG* prop)
> +static HRESULT WINAPI ITextDocument2Old_fnUndo(ITextDocument2Old *iface, LONG Count, LONG *prop)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnRedo(ITextDocument* me, LONG Count, LONG* prop)
> +static HRESULT WINAPI ITextDocument2Old_fnRedo(ITextDocument2Old *iface, LONG Count, LONG *prop)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
> @@ -4112,11 +4091,10 @@ static HRESULT CreateITextRange(IRichEditOleImpl *reOle, LONG start, LONG end, I
>      return S_OK;
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnRange(ITextDocument* me, LONG cp1, LONG cp2,
> -    ITextRange** ppRange)
> +static HRESULT WINAPI ITextDocument2Old_fnRange(ITextDocument2Old *iface, LONG cp1, LONG cp2,
> +                                                ITextRange **ppRange)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      const int len = ME_GetTextLength(This->editor) + 1;
>  
>      TRACE("%p %p %d %d\n", This, ppRange, cp1, cp2);
> @@ -4140,42 +4118,247 @@ ITextDocument_fnRange(ITextDocument* me, LONG cp1, LONG cp2,
>      return CreateITextRange(This, cp1, cp2, ppRange);
>  }
>  
> -static HRESULT WINAPI
> -ITextDocument_fnRangeFromPoint(ITextDocument* me, LONG x, LONG y,
> -    ITextRange** ppRange)
> +static HRESULT WINAPI ITextDocument2Old_fnRangeFromPoint(ITextDocument2Old *iface, LONG x, LONG y,
> +                                                         ITextRange **ppRange)
>  {
> -    IRichEditOleImpl *This = impl_from_ITextDocument(me);
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
>      FIXME("stub %p\n",This);
>      return E_NOTIMPL;
>  }
>  
> -static const ITextDocumentVtbl tdvt = {
> -    ITextDocument_fnQueryInterface,
> -    ITextDocument_fnAddRef,
> -    ITextDocument_fnRelease,
> -    ITextDocument_fnGetTypeInfoCount,
> -    ITextDocument_fnGetTypeInfo,
> -    ITextDocument_fnGetIDsOfNames,
> -    ITextDocument_fnInvoke,
> -    ITextDocument_fnGetName,
> -    ITextDocument_fnGetSelection,
> -    ITextDocument_fnGetStoryCount,
> -    ITextDocument_fnGetStoryRanges,
> -    ITextDocument_fnGetSaved,
> -    ITextDocument_fnSetSaved,
> -    ITextDocument_fnGetDefaultTabStop,
> -    ITextDocument_fnSetDefaultTabStop,
> -    ITextDocument_fnNew,
> -    ITextDocument_fnOpen,
> -    ITextDocument_fnSave,
> -    ITextDocument_fnFreeze,
> -    ITextDocument_fnUnfreeze,
> -    ITextDocument_fnBeginEditCollection,
> -    ITextDocument_fnEndEditCollection,
> -    ITextDocument_fnUndo,
> -    ITextDocument_fnRedo,
> -    ITextDocument_fnRange,
> -    ITextDocument_fnRangeFromPoint
> +/* ITextDocument2Old methods */
> +static HRESULT WINAPI ITextDocument2Old_fnAttachMsgFilter(ITextDocument2Old *iface, IUnknown *filter)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(%p): stub\n", This, filter);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnSetEffectColor(ITextDocument2Old *iface, LONG index, COLORREF cr)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(%d, 0x%x): stub\n", This, index, cr);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnGetEffectColor(ITextDocument2Old *iface, LONG index, COLORREF *cr)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(%d, %p): stub\n", This, index, cr);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnGetCaretType(ITextDocument2Old *iface, LONG *type)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(%p): stub\n", This, type);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnSetCaretType(ITextDocument2Old *iface, LONG type)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(%d): stub\n", This, type);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnGetImmContext(ITextDocument2Old *iface, LONG *context)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(%p): stub\n", This, context);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnReleaseImmContext(ITextDocument2Old *iface, LONG context)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(%d): stub\n", This, context);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnGetPreferredFont(ITextDocument2Old *iface, LONG cp, LONG charrep,
> +                                                           LONG options, LONG current_charrep, LONG current_fontsize,
> +                                                           BSTR *bstr, LONG *pitch_family, LONG *new_fontsize)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(%d, %d, %d, %d, %d, %p, %p, %p): stub\n", This, cp, charrep, options, current_charrep,
> +          current_fontsize, bstr, pitch_family, new_fontsize);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnGetNotificationMode(ITextDocument2Old *iface, LONG *mode)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(%p): stub\n", This, mode);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnSetNotificationMode(ITextDocument2Old *iface, LONG mode)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(0x%x): stub\n", This, mode);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnGetClientRect(ITextDocument2Old *iface, LONG type, LONG *left, LONG *top,
> +                                                        LONG *right, LONG *bottom)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(%d, %p, %p, %p, %p): stub\n", This, type, left, top, right, bottom);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnGetSelectionEx(ITextDocument2Old *iface, ITextSelection **selection)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(%p): stub\n", This, selection);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnGetWindow(ITextDocument2Old *iface, LONG *hwnd)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(%p): stub\n", This, hwnd);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnGetFEFlags(ITextDocument2Old *iface, LONG *flags)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(%p): stub\n", This, flags);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnUpdateWindow(ITextDocument2Old *iface)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p): stub\n", This);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnCheckTextLimit(ITextDocument2Old *iface, LONG cch, LONG *exceed)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(%d, %p): stub\n", This, cch, exceed);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnIMEInProgress(ITextDocument2Old *iface, LONG mode)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(0x%x): stub\n", This, mode);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnSysBeep(ITextDocument2Old *iface)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p): stub\n", This);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnUpdate(ITextDocument2Old *iface, LONG mode)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(0x%x): stub\n", This, mode);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT WINAPI ITextDocument2Old_fnNotify(ITextDocument2Old *iface, LONG notify)
> +{
> +    IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface);
> +
> +    FIXME("(%p)->(%d): stub\n", This, notify);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static const ITextDocument2OldVtbl tdvt = {
> +    ITextDocument2Old_fnQueryInterface,
> +    ITextDocument2Old_fnAddRef,
> +    ITextDocument2Old_fnRelease,
> +    ITextDocument2Old_fnGetTypeInfoCount,
> +    ITextDocument2Old_fnGetTypeInfo,
> +    ITextDocument2Old_fnGetIDsOfNames,
> +    ITextDocument2Old_fnInvoke,
> +    ITextDocument2Old_fnGetName,
> +    ITextDocument2Old_fnGetSelection,
> +    ITextDocument2Old_fnGetStoryCount,
> +    ITextDocument2Old_fnGetStoryRanges,
> +    ITextDocument2Old_fnGetSaved,
> +    ITextDocument2Old_fnSetSaved,
> +    ITextDocument2Old_fnGetDefaultTabStop,
> +    ITextDocument2Old_fnSetDefaultTabStop,
> +    ITextDocument2Old_fnNew,
> +    ITextDocument2Old_fnOpen,
> +    ITextDocument2Old_fnSave,
> +    ITextDocument2Old_fnFreeze,
> +    ITextDocument2Old_fnUnfreeze,
> +    ITextDocument2Old_fnBeginEditCollection,
> +    ITextDocument2Old_fnEndEditCollection,
> +    ITextDocument2Old_fnUndo,
> +    ITextDocument2Old_fnRedo,
> +    ITextDocument2Old_fnRange,
> +    ITextDocument2Old_fnRangeFromPoint,
> +    /* ITextDocument2Old methods */
> +    ITextDocument2Old_fnAttachMsgFilter,
> +    ITextDocument2Old_fnSetEffectColor,
> +    ITextDocument2Old_fnGetEffectColor,
> +    ITextDocument2Old_fnGetCaretType,
> +    ITextDocument2Old_fnSetCaretType,
> +    ITextDocument2Old_fnGetImmContext,
> +    ITextDocument2Old_fnReleaseImmContext,
> +    ITextDocument2Old_fnGetPreferredFont,
> +    ITextDocument2Old_fnGetNotificationMode,
> +    ITextDocument2Old_fnSetNotificationMode,
> +    ITextDocument2Old_fnGetClientRect,
> +    ITextDocument2Old_fnGetSelectionEx,
> +    ITextDocument2Old_fnGetWindow,
> +    ITextDocument2Old_fnGetFEFlags,
> +    ITextDocument2Old_fnUpdateWindow,
> +    ITextDocument2Old_fnCheckTextLimit,
> +    ITextDocument2Old_fnIMEInProgress,
> +    ITextDocument2Old_fnSysBeep,
> +    ITextDocument2Old_fnUpdate,
> +    ITextDocument2Old_fnNotify
>  };
>  
>  /* ITextSelection */
> @@ -5276,7 +5459,7 @@ LRESULT CreateIRichEditOle(IUnknown *outer_unk, ME_TextEditor *editor, LPVOID *p
>  
>      reo->IUnknown_inner.lpVtbl = &reo_unk_vtbl;
>      reo->IRichEditOle_iface.lpVtbl = &revt;
> -    reo->ITextDocument_iface.lpVtbl = &tdvt;
> +    reo->ITextDocument2Old_iface.lpVtbl = &tdvt;
>      reo->ref = 1;
>      reo->editor = editor;
>      reo->txtSel = NULL;
> @@ -5509,8 +5692,8 @@ void ME_CopyReObject(REOBJECT *dst, const REOBJECT *src, DWORD flags)
>      }
>  }
>  
> -void ME_GetITextDocumentInterface(IRichEditOle *iface, LPVOID *ppvObj)
> +void ME_GetITextDocument2OldInterface(IRichEditOle *iface, LPVOID *ppvObj)
>  {
>      IRichEditOleImpl *This = impl_from_IRichEditOle(iface);
> -    *ppvObj = &This->ITextDocument_iface;
> +    *ppvObj = &This->ITextDocument2Old_iface;
>  }
> diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c
> index aaf52bcfdd..3e42047a57 100644
> --- a/dlls/riched20/tests/richole.c
> +++ b/dlls/riched20/tests/richole.c
> @@ -117,6 +117,7 @@ static void test_Interfaces(void)
>  {
>    IRichEditOle *reOle = NULL, *reOle1 = NULL;
>    ITextDocument *txtDoc = NULL;
> +  ITextDocument2Old *txtDoc2Old = NULL;
>    ITextSelection *txtSel = NULL, *txtSel2;
>    IUnknown *punk;
>    HRESULT hres;
> @@ -195,6 +196,14 @@ static void test_Interfaces(void)
>    hres = IRichEditOle_QueryInterface(reOle, &IID_IOleInPlaceSite, (void **) &punk);
>    ok(hres == E_NOINTERFACE, "IRichEditOle_QueryInterface\n");
>  
> +  hres = IRichEditOle_QueryInterface(reOle, &IID_ITextDocument2Old, (void **)&txtDoc2Old);
> +  ok(hres == S_OK, "IRichEditOle_QueryInterface\n");
> +  ok(txtDoc2Old != NULL, "IRichEditOle_QueryInterface\n");
> +  ok((ITextDocument *)txtDoc2Old == txtDoc, "interface pointer isn't equal.\n");
> +  EXPECT_REF(txtDoc2Old, 5);
> +  EXPECT_REF(reOle, 5);
> +  ITextDocument2Old_Release(txtDoc2Old);
> +
>    ITextDocument_Release(txtDoc);
>    IRichEditOle_Release(reOle);
>    refcount = IRichEditOle_Release(reOle);
> diff --git a/dlls/riched20/txtsrv.c b/dlls/riched20/txtsrv.c
> index ee65621b1d..5ab3322e6b 100644
> --- a/dlls/riched20/txtsrv.c
> +++ b/dlls/riched20/txtsrv.c
> @@ -83,7 +83,7 @@ static HRESULT WINAPI ITextServicesImpl_QueryInterface(IUnknown *iface, REFIID r
>           if (!CreateIRichEditOle(This->outer_unk, This->editor, (void **)(&This->editor->reOle)))
>              return E_OUTOFMEMORY;
>        if (IsEqualIID(riid, &IID_ITextDocument))
> -         ME_GetITextDocumentInterface(This->editor->reOle, ppv);
> +         ME_GetITextDocument2OldInterface(This->editor->reOle, ppv);
>        else
>           *ppv = This->editor->reOle;
>     } else {
> -- 
> 2.18.0
> 
> 
> 
> 



More information about the wine-devel mailing list