From: Jactry Zeng Subject: [PATCH v3 3/4] riched20: Add IID_ITextDocument2Old support for ITextServices_QueryInterface(). Message-Id: <9ebed49e-ee22-3efc-2792-068b3029c6c2@codeweavers.com> Date: Thu, 13 Sep 2018 16:15:34 +0800 Superseded patch 151077. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=20613 Signed-off-by: Jactry Zeng --- dlls/riched20/tests/txtsrv.c | 34 ++++++++++++++++++++++++++++++++++ dlls/riched20/txtsrv.c | 5 +++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/dlls/riched20/tests/txtsrv.c b/dlls/riched20/tests/txtsrv.c index a8cf6ff1ad..1aa08f89a4 100644 --- a/dlls/riched20/tests/txtsrv.c +++ b/dlls/riched20/tests/txtsrv.c @@ -904,6 +904,7 @@ static void test_QueryInterface(void) HRESULT hres; IRichEditOle *reole, *txtsrv_reole; ITextDocument *txtdoc, *txtsrv_txtdoc; + ITextDocument2Old *txtdoc2old, *txtsrv_txtdoc2old; ULONG refcount; if(!init_texthost(&txtserv, &host)) @@ -930,6 +931,17 @@ static void test_QueryInterface(void) ITextDocument_Release(txtdoc); refcount = get_refcount((IUnknown *)txtserv); ok(refcount == 2, "got wrong ref count: %d\n", refcount); + + hres = IRichEditOle_QueryInterface(txtsrv_reole, &IID_ITextDocument2Old, (void **)&txtdoc2old); + ok(hres == S_OK, "IRichEditOle_QueryInterface: 0x%08x\n", hres); + refcount = get_refcount((IUnknown *)txtserv); + ok(refcount == 3, "got wrong ref count: %d\n", refcount); + refcount = get_refcount((IUnknown *)txtsrv_reole); + ok(refcount == 3, "got wrong ref count: %d\n", refcount); + + ITextDocument2Old_Release(txtdoc2old); + refcount = get_refcount((IUnknown *)txtserv); + ok(refcount == 2, "got wrong ref count: %d\n", refcount); IRichEditOle_Release(txtsrv_reole); refcount = get_refcount((IUnknown *)txtserv); ok(refcount == 1, "got wrong ref count: %d\n", refcount); @@ -956,6 +968,28 @@ static void test_QueryInterface(void) refcount = get_refcount((IUnknown *)txtserv); ok(refcount == 1, "got wrong ref count: %d\n", refcount); + /* ITextDocument2Old */ + hres = ITextServices_QueryInterface(txtserv, &IID_ITextDocument2Old, (void **)&txtsrv_txtdoc2old); + ok(hres == S_OK, "ITextServices_QueryInterface: 0x%08x\n", hres); + refcount = get_refcount((IUnknown *)txtserv); + ok(refcount == 2, "got wrong ref count: %d\n", refcount); + refcount = get_refcount((IUnknown *)txtsrv_txtdoc2old); + ok(refcount == 2, "got wrong ref count: %d\n", refcount); + + hres = ITextDocument2Old_QueryInterface(txtsrv_txtdoc2old, &IID_IRichEditOle, (void **)&reole); + ok(hres == S_OK, "ITextDocument2Old_QueryInterface: 0x%08x\n", hres); + refcount = get_refcount((IUnknown *)txtserv); + ok(refcount == 3, "got wrong ref count: %d\n", refcount); + refcount = get_refcount((IUnknown *)txtsrv_txtdoc2old); + ok(refcount == 3, "got wrong ref count: %d\n", refcount); + + IRichEditOle_Release(reole); + refcount = get_refcount((IUnknown *)txtserv); + ok(refcount == 2, "got wrong ref count: %d\n", refcount); + ITextDocument2Old_Release(txtsrv_txtdoc2old); + refcount = get_refcount((IUnknown *)txtserv); + ok(refcount == 1, "got wrong ref count: %d\n", refcount); + ITextServices_Release(txtserv); ITextHost_Release(host); } diff --git a/dlls/riched20/txtsrv.c b/dlls/riched20/txtsrv.c index 5ab3322e6b..cf957cff89 100644 --- a/dlls/riched20/txtsrv.c +++ b/dlls/riched20/txtsrv.c @@ -78,11 +78,12 @@ static HRESULT WINAPI ITextServicesImpl_QueryInterface(IUnknown *iface, REFIID r *ppv = &This->IUnknown_inner; else if (IsEqualIID(riid, &IID_ITextServices)) *ppv = &This->ITextServices_iface; - else if (IsEqualIID(riid, &IID_IRichEditOle) || IsEqualIID(riid, &IID_ITextDocument)) { + else if (IsEqualIID(riid, &IID_IRichEditOle) || IsEqualIID(riid, &IID_ITextDocument) || + IsEqualIID(riid, &IID_ITextDocument2Old)) { if (!This->editor->reOle) if (!CreateIRichEditOle(This->outer_unk, This->editor, (void **)(&This->editor->reOle))) return E_OUTOFMEMORY; - if (IsEqualIID(riid, &IID_ITextDocument)) + if (IsEqualIID(riid, &IID_ITextDocument) || IsEqualIID(riid, &IID_ITextDocument2Old)) ME_GetITextDocument2OldInterface(This->editor->reOle, ppv); else *ppv = This->editor->reOle; -- 2.18.0