diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c index deb0a93c8dc..d4aadc325f9 100644 --- a/dlls/riched20/editor.c +++ b/dlls/riched20/editor.c @@ -1121,7 +1121,6 @@ static HRESULT insert_static_object(ME_TextEditor *editor, HENHMETAFILE hemf, HB LPOLECLIENTSITE lpClientSite = NULL; LPDATAOBJECT lpDataObject = NULL; LPOLECACHE lpOleCache = NULL; - LPRICHEDITOLE lpReOle = NULL; STGMEDIUM stgm; FORMATETC fm; CLSID clsid; @@ -1149,15 +1148,8 @@ static HRESULT insert_static_object(ME_TextEditor *editor, HENHMETAFILE hemf, HB fm.lindex = -1; fm.tymed = stgm.tymed; - if (!editor->reOle) - { - if (!CreateIRichEditOle(NULL, editor, (LPVOID *)&editor->reOle)) - return hr; - } - if (OleCreateDefaultHandler(&CLSID_NULL, NULL, &IID_IOleObject, (void**)&lpObject) == S_OK && - IUnknown_QueryInterface(editor->reOle, &IID_IRichEditOle, (void**)&lpReOle) == S_OK && - IRichEditOle_GetClientSite(lpReOle, &lpClientSite) == S_OK && + IRichEditOle_GetClientSite(editor->richole, &lpClientSite) == S_OK && IOleObject_SetClientSite(lpObject, lpClientSite) == S_OK && IOleObject_GetUserClassID(lpObject, &clsid) == S_OK && IOleObject_QueryInterface(lpObject, &IID_IOleCache, (void**)&lpOleCache) == S_OK && @@ -1189,7 +1181,6 @@ static HRESULT insert_static_object(ME_TextEditor *editor, HENHMETAFILE hemf, HB if (lpStorage) IStorage_Release(lpStorage); if (lpDataObject) IDataObject_Release(lpDataObject); if (lpOleCache) IOleCache_Release(lpOleCache); - if (lpReOle) IRichEditOle_Release(lpReOle); return hr; } @@ -2950,7 +2941,6 @@ ME_TextEditor *ME_MakeEditor(ITextHost *texthost, BOOL bEmulateVersion10) ed->have_texthost2 = FALSE; } - ed->reOle = NULL; ed->bEmulateVersion10 = bEmulateVersion10; ed->in_place_active = FALSE; ed->total_rows = 0; @@ -2993,6 +2983,7 @@ ME_TextEditor *ME_MakeEditor(ITextHost *texthost, BOOL bEmulateVersion10) ed->last_sel_start_para = ed->last_sel_end_para = ed->pCursors[0].para; ed->bHideSelection = FALSE; ed->pfnWordBreak = NULL; + ed->richole = NULL; ed->lpOleCallback = NULL; ed->mode = TM_MULTILEVELUNDO | TM_MULTICODEPAGE; ed->mode |= (ed->props & TXTBIT_RICHTEXT) ? TM_RICHTEXT : TM_PLAINTEXT; @@ -3094,11 +3085,7 @@ void ME_DestroyEditor(ME_TextEditor *editor) } if(editor->lpOleCallback) IRichEditOleCallback_Release(editor->lpOleCallback); - if (editor->reOle) - { - IUnknown_Release(editor->reOle); - editor->reOle = NULL; - } + OleUninitialize(); heap_free(editor->pBuffer); @@ -4159,14 +4146,10 @@ LRESULT editor_handle_message( ME_TextEditor *editor, UINT msg, WPARAM wParam, return 0; } case EM_GETOLEINTERFACE: - { - if (!editor->reOle) - if (!CreateIRichEditOle(NULL, editor, (LPVOID *)&editor->reOle)) - return 0; - if (IUnknown_QueryInterface(editor->reOle, &IID_IRichEditOle, (LPVOID *)lParam) == S_OK) - return 1; - return 0; - } + IRichEditOle_AddRef( editor->richole ); + *(IRichEditOle **)lParam = editor->richole; + return 1; + case EM_SETOLECALLBACK: if(editor->lpOleCallback) IRichEditOleCallback_Release(editor->lpOleCallback); diff --git a/dlls/riched20/editor.h b/dlls/riched20/editor.h index d0274de409d..141e9034a6a 100644 --- a/dlls/riched20/editor.h +++ b/dlls/riched20/editor.h @@ -263,11 +263,13 @@ void ME_UpdateScrollBar(ME_TextEditor *editor) DECLSPEC_HIDDEN; int ME_GetParaBorderWidth(const ME_Context *c, int flags) DECLSPEC_HIDDEN; /* richole.c */ -LRESULT CreateIRichEditOle(IUnknown *outer_unk, ME_TextEditor *editor, LPVOID *ppvObj) DECLSPEC_HIDDEN; void draw_ole( ME_Context *c, int x, int y, ME_Run* run, BOOL selected ) DECLSPEC_HIDDEN; 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 richole_release_children( struct text_services *services ) DECLSPEC_HIDDEN; +extern const IRichEditOleVtbl re_ole_vtbl DECLSPEC_HIDDEN; +extern const ITextDocument2OldVtbl text_doc2old_vtbl DECLSPEC_HIDDEN; /* editor.c */ ME_TextEditor *ME_MakeEditor(ITextHost *texthost, BOOL bEmulateVersion10) DECLSPEC_HIDDEN; diff --git a/dlls/riched20/editstr.h b/dlls/riched20/editstr.h index 86b3f0196c7..22cfd74722c 100644 --- a/dlls/riched20/editstr.h +++ b/dlls/riched20/editstr.h @@ -41,6 +41,7 @@ #include #include "imm.h" #include +#include #include "usp10.h" #include "wine/asm.h" @@ -378,7 +379,6 @@ typedef struct tagME_InStream ME_InStream; typedef struct tagME_TextEditor { ITextHost2 *texthost; - IUnknown *reOle; unsigned int bEmulateVersion10 : 1; unsigned int in_place_active : 1; unsigned int have_texthost2 : 1; @@ -409,6 +409,7 @@ typedef struct tagME_TextEditor BOOL bWordWrap; int nTextLimit; EDITWORDBREAKPROCW pfnWordBreak; + IRichEditOle *richole; LPRICHEDITOLECALLBACK lpOleCallback; /*TEXTMODE variable; contains only one of each of the following options: *TM_RICHTEXT or TM_PLAINTEXT @@ -456,4 +457,27 @@ typedef struct tagME_Context ME_TextEditor *editor; } ME_Context; +struct text_selection +{ + ITextSelection ITextSelection_iface; + LONG ref; + + struct text_services *services; +}; + +struct text_services +{ + IUnknown IUnknown_inner; + ITextServices ITextServices_iface; + IRichEditOle IRichEditOle_iface; + ITextDocument2Old ITextDocument2Old_iface; + IUnknown *outer_unk; + LONG ref; + ME_TextEditor *editor; + struct text_selection *text_selection; + struct list rangelist; + struct list clientsites; + char spare[256]; /* for bug #12179 */ +}; + #endif diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c index 2bb15bb4504..72840a4cafa 100644 --- a/dlls/riched20/richole.c +++ b/dlls/riched20/richole.c @@ -136,7 +136,6 @@ static HRESULT get_typeinfo(enum tid_t tid, ITypeInfo **typeinfo) /* private IID used to get back IRichEditOleImpl pointer */ DEFINE_GUID(IID_Igetrichole, 0xe3ce5c7a, 0x8247, 0x4622, 0x81, 0xad, 0x11, 0x81, 0x02, 0xaa, 0x01, 0x30); -typedef struct ITextSelectionImpl ITextSelectionImpl; typedef struct IOleClientSiteImpl IOleClientSiteImpl; typedef struct ITextRangeImpl ITextRangeImpl; @@ -206,23 +205,9 @@ enum range_update_op { RANGE_UPDATE_DELETE }; -typedef struct IRichEditOleImpl { - IUnknown IUnknown_inner; - IRichEditOle IRichEditOle_iface; - ITextDocument2Old ITextDocument2Old_iface; - IUnknown *outer_unk; - LONG ref; - - ME_TextEditor *editor; - ITextSelectionImpl *txtSel; - - struct list rangelist; - struct list clientsites; -} IRichEditOleImpl; - struct reole_child { struct list entry; - IRichEditOleImpl *reole; + struct text_services *reole; }; struct ITextRangeImpl { @@ -232,13 +217,6 @@ struct ITextRangeImpl { LONG start, end; }; -struct ITextSelectionImpl { - ITextSelection ITextSelection_iface; - LONG ref; - - IRichEditOleImpl *reOle; -}; - typedef struct ITextFontImpl { ITextFont ITextFont_iface; LONG ref; @@ -263,19 +241,14 @@ struct IOleClientSiteImpl { LONG ref; }; -static inline IRichEditOleImpl *impl_from_IRichEditOle(IRichEditOle *iface) +static inline struct text_services *impl_from_IRichEditOle( IRichEditOle *iface ) { - return CONTAINING_RECORD(iface, IRichEditOleImpl, IRichEditOle_iface); + return CONTAINING_RECORD( iface, struct text_services, IRichEditOle_iface ); } -static inline IRichEditOleImpl *impl_from_ITextDocument2Old(ITextDocument2Old *iface) +static inline struct text_services *impl_from_ITextDocument2Old( ITextDocument2Old *iface ) { - return CONTAINING_RECORD(iface, IRichEditOleImpl, ITextDocument2Old_iface); -} - -static inline IRichEditOleImpl *impl_from_IUnknown(IUnknown *iface) -{ - return CONTAINING_RECORD(iface, IRichEditOleImpl, IUnknown_inner); + return CONTAINING_RECORD( iface, struct text_services, ITextDocument2Old_iface ); } static inline IOleClientSiteImpl *impl_from_IOleInPlaceSite(IOleInPlaceSite *iface) @@ -288,9 +261,9 @@ static inline ITextRangeImpl *impl_from_ITextRange(ITextRange *iface) return CONTAINING_RECORD(iface, ITextRangeImpl, ITextRange_iface); } -static inline ITextSelectionImpl *impl_from_ITextSelection(ITextSelection *iface) +static inline struct text_selection *impl_from_ITextSelection(ITextSelection *iface) { - return CONTAINING_RECORD(iface, ITextSelectionImpl, ITextSelection_iface); + return CONTAINING_RECORD(iface, struct text_selection, ITextSelection_iface); } static inline ITextFontImpl *impl_from_ITextFont(ITextFont *iface) @@ -305,7 +278,7 @@ static inline ITextParaImpl *impl_from_ITextPara(ITextPara *iface) static HRESULT create_textfont(ITextRange*, const ITextFontImpl*, ITextFont**); static HRESULT create_textpara(ITextRange*, ITextPara**); -static ITextSelectionImpl *CreateTextSelection(IRichEditOleImpl*); +static struct text_selection *text_selection_create( struct text_services * ); static HRESULT textrange_get_storylength(ME_TextEditor *editor, LONG *length) { @@ -316,11 +289,11 @@ static HRESULT textrange_get_storylength(ME_TextEditor *editor, LONG *length) return S_OK; } -static void textranges_update_ranges(IRichEditOleImpl *reole, LONG start, LONG end, enum range_update_op op) +static void textranges_update_ranges(struct text_services *services, LONG start, LONG end, enum range_update_op op) { ITextRangeImpl *range; - LIST_FOR_EACH_ENTRY(range, &reole->rangelist, ITextRangeImpl, child.entry) { + LIST_FOR_EACH_ENTRY(range, &services->rangelist, ITextRangeImpl, child.entry) { switch (op) { case RANGE_UPDATE_DELETE: @@ -434,7 +407,7 @@ static inline FLOAT points_to_twips(FLOAT value) return value * 1440 / 72.0; } -static HRESULT get_textfont_prop_for_pos(const IRichEditOleImpl *reole, int pos, enum textfont_prop_id propid, +static HRESULT get_textfont_prop_for_pos(const struct text_services *services, int pos, enum textfont_prop_id propid, textfont_prop_val *value) { ME_Cursor from, to; @@ -444,10 +417,10 @@ static HRESULT get_textfont_prop_for_pos(const IRichEditOleImpl *reole, int pos, fmt.cbSize = sizeof(fmt); fmt.dwMask = textfont_prop_masks[propid][0]; - cursor_from_char_ofs( reole->editor, pos, &from ); + cursor_from_char_ofs( services->editor, pos, &from ); to = from; - ME_MoveCursorChars(reole->editor, &to, 1, FALSE); - ME_GetCharFormat(reole->editor, &from, &to, &fmt); + ME_MoveCursorChars( services->editor, &to, 1, FALSE ); + ME_GetCharFormat( services->editor, &from, &to, &fmt ); switch (propid) { @@ -508,11 +481,11 @@ static HRESULT get_textfont_prop_for_pos(const IRichEditOleImpl *reole, int pos, return S_OK; } -static inline const IRichEditOleImpl *get_range_reole(ITextRange *range) +static inline const struct text_services *get_range_reole(ITextRange *range) { - IRichEditOleImpl *reole = NULL; - ITextRange_QueryInterface(range, &IID_Igetrichole, (void**)&reole); - return reole; + struct text_services *services = NULL; + ITextRange_QueryInterface(range, &IID_Igetrichole, (void**)&services); + return services; } static void textrange_set_font(ITextRange *range, ITextFont *font) @@ -664,22 +637,22 @@ static void textrange_set_font(ITextRange *range, ITextFont *font) if (fmt.dwMask) { - const IRichEditOleImpl *reole = get_range_reole(range); + const struct text_services *services = get_range_reole(range); ME_Cursor from, to; LONG start, end; ITextRange_GetStart(range, &start); ITextRange_GetEnd(range, &end); - cursor_from_char_ofs( reole->editor, start, &from ); - cursor_from_char_ofs( reole->editor, end, &to ); - ME_SetCharFormat(reole->editor, &from, &to, &fmt); + cursor_from_char_ofs( services->editor, start, &from ); + cursor_from_char_ofs( services->editor, end, &to ); + ME_SetCharFormat( services->editor, &from, &to, &fmt ); } } static HRESULT get_textfont_prop(const ITextFontImpl *font, enum textfont_prop_id propid, textfont_prop_val *value) { - const IRichEditOleImpl *reole; + const struct text_services *services; textfont_prop_val v; LONG start, end, i; HRESULT hr; @@ -690,7 +663,7 @@ static HRESULT get_textfont_prop(const ITextFontImpl *font, enum textfont_prop_i return S_OK; } - if (!(reole = get_range_reole(font->range))) + if (!(services = get_range_reole(font->range))) return CO_E_RELEASED; init_textfont_prop_value(propid, value); @@ -699,14 +672,14 @@ static HRESULT get_textfont_prop(const ITextFontImpl *font, enum textfont_prop_i ITextRange_GetEnd(font->range, &end); /* iterate trough a range to see if property value is consistent */ - hr = get_textfont_prop_for_pos(reole, start, propid, &v); + hr = get_textfont_prop_for_pos( services, start, propid, &v ); if (FAILED(hr)) return hr; for (i = start + 1; i < end; i++) { textfont_prop_val cur; - hr = get_textfont_prop_for_pos(reole, i, propid, &cur); + hr = get_textfont_prop_for_pos( services, i, propid, &cur ); if (FAILED(hr)) return hr; @@ -747,7 +720,7 @@ static HRESULT get_textfont_propl(const ITextFontImpl *font, enum textfont_prop_ /* Value should already have a terminal value, for boolean properties it means tomToggle is not handled */ static HRESULT set_textfont_prop(ITextFontImpl *font, enum textfont_prop_id propid, const textfont_prop_val *value) { - const IRichEditOleImpl *reole; + const struct text_services *services; ME_Cursor from, to; CHARFORMAT2W fmt; LONG start, end; @@ -763,7 +736,7 @@ static HRESULT set_textfont_prop(ITextFontImpl *font, enum textfont_prop_id prop return S_OK; } - if (!(reole = get_range_reole(font->range))) + if (!(services = get_range_reole(font->range))) return CO_E_RELEASED; memset(&fmt, 0, sizeof(fmt)); @@ -829,9 +802,9 @@ static HRESULT set_textfont_prop(ITextFontImpl *font, enum textfont_prop_id prop ITextRange_GetStart(font->range, &start); ITextRange_GetEnd(font->range, &end); - cursor_from_char_ofs( reole->editor, start, &from ); - cursor_from_char_ofs( reole->editor, end, &to ); - ME_SetCharFormat(reole->editor, &from, &to, &fmt); + cursor_from_char_ofs( services->editor, start, &from ); + cursor_from_char_ofs( services->editor, end, &to ); + ME_SetCharFormat( services->editor, &from, &to, &fmt ); return S_OK; } @@ -880,16 +853,16 @@ static HRESULT set_textfont_propd(ITextFontImpl *font, enum textfont_prop_id pro static HRESULT textfont_getname_from_range(ITextRange *range, BSTR *ret) { - const IRichEditOleImpl *reole; + const struct text_services *services; textfont_prop_val v; HRESULT hr; LONG start; - if (!(reole = get_range_reole(range))) + if (!(services = get_range_reole( range ))) return CO_E_RELEASED; ITextRange_GetStart(range, &start); - hr = get_textfont_prop_for_pos(reole, start, FONT_NAME, &v); + hr = get_textfont_prop_for_pos( services, start, FONT_NAME, &v ); *ret = v.str; return hr; } @@ -934,118 +907,48 @@ static HRESULT textrange_expand(ITextRange *range, LONG unit, LONG *delta) return S_OK; } -static HRESULT WINAPI IRichEditOleImpl_inner_fnQueryInterface(IUnknown *iface, REFIID riid, LPVOID *ppvObj) -{ - IRichEditOleImpl *This = impl_from_IUnknown(iface); - - TRACE("%p %s\n", This, debugstr_guid(riid)); - - *ppvObj = NULL; - if (IsEqualGUID(riid, &IID_IUnknown)) - *ppvObj = &This->IUnknown_inner; - else if (IsEqualGUID(riid, &IID_IRichEditOle)) - *ppvObj = &This->IRichEditOle_iface; - else if (IsEqualGUID(riid, &IID_ITextDocument) || IsEqualGUID(riid, &IID_ITextDocument2Old)) - *ppvObj = &This->ITextDocument2Old_iface; - if (*ppvObj) - { - IUnknown_AddRef((IUnknown *)*ppvObj); - return S_OK; - } - FIXME("%p: unhandled interface %s\n", This, debugstr_guid(riid)); - - return E_NOINTERFACE; -} - -static ULONG WINAPI IRichEditOleImpl_inner_fnAddRef(IUnknown *iface) -{ - IRichEditOleImpl *This = impl_from_IUnknown(iface); - ULONG ref = InterlockedIncrement(&This->ref); - - TRACE("%p ref = %u\n", This, ref); - - return ref; -} - -static ULONG WINAPI IRichEditOleImpl_inner_fnRelease(IUnknown *iface) -{ - IRichEditOleImpl *This = impl_from_IUnknown(iface); - ULONG ref = InterlockedDecrement(&This->ref); - - TRACE ("%p ref=%u\n", This, ref); - - if (!ref) - { - IOleClientSiteImpl *clientsite; - ITextRangeImpl *txtRge; - - This->editor->reOle = NULL; - if (This->txtSel) { - This->txtSel->reOle = NULL; - ITextSelection_Release(&This->txtSel->ITextSelection_iface); - } - - LIST_FOR_EACH_ENTRY(txtRge, &This->rangelist, ITextRangeImpl, child.entry) - txtRge->child.reole = NULL; - - LIST_FOR_EACH_ENTRY(clientsite, &This->clientsites, IOleClientSiteImpl, child.entry) - clientsite->child.reole = NULL; - - heap_free(This); - } - return ref; -} - -static const IUnknownVtbl reo_unk_vtbl = -{ - IRichEditOleImpl_inner_fnQueryInterface, - IRichEditOleImpl_inner_fnAddRef, - IRichEditOleImpl_inner_fnRelease -}; - static HRESULT WINAPI -IRichEditOle_fnQueryInterface(IRichEditOle *me, REFIID riid, LPVOID *ppvObj) +IRichEditOle_fnQueryInterface(IRichEditOle *iface, REFIID riid, LPVOID *ppvObj) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); - return IUnknown_QueryInterface(This->outer_unk, riid, ppvObj); + struct text_services *services = impl_from_IRichEditOle( iface ); + return IUnknown_QueryInterface( services->outer_unk, riid, ppvObj ); } static ULONG WINAPI -IRichEditOle_fnAddRef(IRichEditOle *me) +IRichEditOle_fnAddRef(IRichEditOle *iface) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); - return IUnknown_AddRef(This->outer_unk); + struct text_services *services = impl_from_IRichEditOle( iface ); + return IUnknown_AddRef( services->outer_unk ); } static ULONG WINAPI -IRichEditOle_fnRelease(IRichEditOle *me) +IRichEditOle_fnRelease(IRichEditOle *iface) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); - return IUnknown_Release(This->outer_unk); + struct text_services *services = impl_from_IRichEditOle( iface ); + return IUnknown_Release( services->outer_unk ); } static HRESULT WINAPI -IRichEditOle_fnActivateAs(IRichEditOle *me, REFCLSID rclsid, REFCLSID rclsidAs) +IRichEditOle_fnActivateAs(IRichEditOle *iface, REFCLSID rclsid, REFCLSID rclsidAs) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_IRichEditOle( iface ); + FIXME( "stub %p\n", services ); return E_NOTIMPL; } static HRESULT WINAPI -IRichEditOle_fnContextSensitiveHelp(IRichEditOle *me, BOOL fEnterMode) +IRichEditOle_fnContextSensitiveHelp(IRichEditOle *iface, BOOL fEnterMode) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_IRichEditOle( iface ); + FIXME( "stub %p\n", services ); return E_NOTIMPL; } static HRESULT WINAPI -IRichEditOle_fnConvertObject(IRichEditOle *me, LONG iob, - REFCLSID rclsidNew, LPCSTR lpstrUserTypeNew) +IRichEditOle_fnConvertObject( IRichEditOle *iface, LONG iob, REFCLSID class, LPCSTR user_type ) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_IRichEditOle( iface ); + FIXME( "stub %p\n", services ); return E_NOTIMPL; } @@ -1308,7 +1211,7 @@ static const IOleInPlaceSiteVtbl olestvt = IOleInPlaceSite_fnOnPosRectChange }; -static HRESULT CreateOleClientSite(IRichEditOleImpl *reOle, IOleClientSite **ret) +static HRESULT CreateOleClientSite( struct text_services *services, IOleClientSite **ret ) { IOleClientSiteImpl *clientSite = heap_alloc(sizeof *clientSite); @@ -1318,67 +1221,67 @@ static HRESULT CreateOleClientSite(IRichEditOleImpl *reOle, IOleClientSite **ret clientSite->IOleClientSite_iface.lpVtbl = &ocst; clientSite->IOleInPlaceSite_iface.lpVtbl = &olestvt; clientSite->ref = 1; - clientSite->child.reole = reOle; - list_add_head(&reOle->clientsites, &clientSite->child.entry); + clientSite->child.reole = services; + list_add_head( &services->clientsites, &clientSite->child.entry ); *ret = &clientSite->IOleClientSite_iface; return S_OK; } static HRESULT WINAPI -IRichEditOle_fnGetClientSite(IRichEditOle *me, IOleClientSite **clientsite) +IRichEditOle_fnGetClientSite( IRichEditOle *iface, IOleClientSite **clientsite ) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); + struct text_services *services = impl_from_IRichEditOle( iface ); - TRACE("(%p)->(%p)\n", This, clientsite); + TRACE("(%p)->(%p)\n", services, clientsite); if (!clientsite) return E_INVALIDARG; - return CreateOleClientSite(This, clientsite); + return CreateOleClientSite( services, clientsite ); } static HRESULT WINAPI -IRichEditOle_fnGetClipboardData(IRichEditOle *me, CHARRANGE *lpchrg, +IRichEditOle_fnGetClipboardData(IRichEditOle *iface, CHARRANGE *lpchrg, DWORD reco, LPDATAOBJECT *lplpdataobj) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); + struct text_services *services = impl_from_IRichEditOle( iface ); ME_Cursor start; int nChars; - TRACE("(%p,%p,%d)\n",This, lpchrg, reco); + TRACE("(%p,%p,%d)\n", services, lpchrg, reco); if(!lplpdataobj) return E_INVALIDARG; if(!lpchrg) { - int nFrom, nTo, nStartCur = ME_GetSelectionOfs(This->editor, &nFrom, &nTo); - start = This->editor->pCursors[nStartCur]; + int nFrom, nTo, nStartCur = ME_GetSelectionOfs( services->editor, &nFrom, &nTo ); + start = services->editor->pCursors[nStartCur]; nChars = nTo - nFrom; } else { - cursor_from_char_ofs( This->editor, lpchrg->cpMin, &start ); + cursor_from_char_ofs( services->editor, lpchrg->cpMin, &start ); nChars = lpchrg->cpMax - lpchrg->cpMin; } - return ME_GetDataObject(This->editor, &start, nChars, lplpdataobj); + return ME_GetDataObject( services->editor, &start, nChars, lplpdataobj ); } -static LONG WINAPI IRichEditOle_fnGetLinkCount(IRichEditOle *me) +static LONG WINAPI IRichEditOle_fnGetLinkCount(IRichEditOle *iface) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_IRichEditOle( iface ); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI -IRichEditOle_fnGetObject(IRichEditOle *me, LONG iob, +IRichEditOle_fnGetObject(IRichEditOle *iface, LONG iob, REOBJECT *lpreobject, DWORD dwFlags) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); + struct text_services *services = impl_from_IRichEditOle( iface ); struct re_object *reobj = NULL; LONG count = 0; - TRACE("(%p)->(%x, %p, %x)\n", This, iob, lpreobject, dwFlags); + TRACE("(%p)->(%x, %p, %x)\n", services, iob, lpreobject, dwFlags); if (!lpreobject || !lpreobject->cbStruct) return E_INVALIDARG; @@ -1388,7 +1291,7 @@ IRichEditOle_fnGetObject(IRichEditOle *me, LONG iob, ME_Cursor cursor; TRACE("character offset: %d\n", lpreobject->cp); - cursor_from_char_ofs( This->editor, lpreobject->cp, &cursor ); + cursor_from_char_ofs( services->editor, lpreobject->cp, &cursor ); if (!cursor.run->reobj) return E_INVALIDARG; else @@ -1398,7 +1301,7 @@ IRichEditOle_fnGetObject(IRichEditOle *me, LONG iob, { ME_Cursor *from, *to; - ME_GetSelection(This->editor, &from, &to); + ME_GetSelection(services->editor, &from, &to); if (!from->run->reobj) return E_INVALIDARG; else @@ -1406,9 +1309,9 @@ IRichEditOle_fnGetObject(IRichEditOle *me, LONG iob, } else { - if (iob < 0 || iob >= IRichEditOle_GetObjectCount(me)) + if (iob < 0 || iob >= IRichEditOle_GetObjectCount( iface )) return E_INVALIDARG; - LIST_FOR_EACH_ENTRY(reobj, &This->editor->reobj_list, struct re_object, entry) + LIST_FOR_EACH_ENTRY(reobj, &services->editor->reobj_list, struct re_object, entry) { if (count == iob) break; @@ -1420,89 +1323,90 @@ IRichEditOle_fnGetObject(IRichEditOle *me, LONG iob, } static LONG WINAPI -IRichEditOle_fnGetObjectCount(IRichEditOle *me) +IRichEditOle_fnGetObjectCount( IRichEditOle *iface ) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); - TRACE("(%p)\n",This); - return list_count(&This->editor->reobj_list); + struct text_services *services = impl_from_IRichEditOle( iface ); + TRACE("(%p)\n", services); + return list_count( &services->editor->reobj_list ); } static HRESULT WINAPI -IRichEditOle_fnHandsOffStorage(IRichEditOle *me, LONG iob) +IRichEditOle_fnHandsOffStorage(IRichEditOle *iface, LONG iob) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_IRichEditOle( iface ); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI -IRichEditOle_fnImportDataObject(IRichEditOle *me, LPDATAOBJECT lpdataobj, +IRichEditOle_fnImportDataObject(IRichEditOle *iface, LPDATAOBJECT lpdataobj, CLIPFORMAT cf, HGLOBAL hMetaPict) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_IRichEditOle( iface ); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI -IRichEditOle_fnInPlaceDeactivate(IRichEditOle *me) +IRichEditOle_fnInPlaceDeactivate(IRichEditOle *iface) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_IRichEditOle( iface ); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI -IRichEditOle_fnInsertObject(IRichEditOle *me, REOBJECT *reo) +IRichEditOle_fnInsertObject(IRichEditOle *iface, REOBJECT *reo) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); + struct text_services *services = impl_from_IRichEditOle( iface ); - TRACE("(%p,%p)\n", This, reo); + TRACE("(%p,%p)\n", services, reo); if (!reo) return E_INVALIDARG; if (reo->cbStruct < sizeof(*reo)) return STG_E_INVALIDPARAMETER; - ME_InsertOLEFromCursor(This->editor, reo, 0); - ME_CommitUndo(This->editor); - ME_UpdateRepaint(This->editor, FALSE); + ME_InsertOLEFromCursor(services->editor, reo, 0); + ME_CommitUndo(services->editor); + ME_UpdateRepaint(services->editor, FALSE); return S_OK; } -static HRESULT WINAPI IRichEditOle_fnSaveCompleted(IRichEditOle *me, LONG iob, +static HRESULT WINAPI IRichEditOle_fnSaveCompleted(IRichEditOle *iface, LONG iob, LPSTORAGE lpstg) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_IRichEditOle( iface ); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI -IRichEditOle_fnSetDvaspect(IRichEditOle *me, LONG iob, DWORD dvaspect) +IRichEditOle_fnSetDvaspect(IRichEditOle *iface, LONG iob, DWORD dvaspect) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_IRichEditOle( iface ); + FIXME("stub %p\n", services); return E_NOTIMPL; } -static HRESULT WINAPI IRichEditOle_fnSetHostNames(IRichEditOle *me, +static HRESULT WINAPI IRichEditOle_fnSetHostNames(IRichEditOle *iface, LPCSTR lpstrContainerApp, LPCSTR lpstrContainerObj) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); - FIXME("stub %p %s %s\n",This, lpstrContainerApp, lpstrContainerObj); + struct text_services *services = impl_from_IRichEditOle( iface ); + FIXME("stub %p %s %s\n", services, lpstrContainerApp, lpstrContainerObj); return E_NOTIMPL; } static HRESULT WINAPI -IRichEditOle_fnSetLinkAvailable(IRichEditOle *me, LONG iob, BOOL fAvailable) +IRichEditOle_fnSetLinkAvailable(IRichEditOle *iface, LONG iob, BOOL fAvailable) { - IRichEditOleImpl *This = impl_from_IRichEditOle(me); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_IRichEditOle( iface ); + FIXME("stub %p\n", services); return E_NOTIMPL; } -static const IRichEditOleVtbl revt = { +const IRichEditOleVtbl re_ole_vtbl = +{ IRichEditOle_fnQueryInterface, IRichEditOle_fnAddRef, IRichEditOle_fnRelease, @@ -1750,7 +1654,7 @@ static HRESULT WINAPI ITextRange_fnSetChar(ITextRange *me, LONG ch) return E_NOTIMPL; } -static HRESULT CreateITextRange(IRichEditOleImpl *reOle, LONG start, LONG end, ITextRange** ppRange); +static HRESULT CreateITextRange(struct text_services *services, LONG start, LONG end, ITextRange** ppRange); static HRESULT WINAPI ITextRange_fnGetDuplicate(ITextRange *me, ITextRange **ppRange) { @@ -1807,7 +1711,7 @@ static HRESULT WINAPI ITextRange_fnGetStart(ITextRange *me, LONG *start) return S_OK; } -static HRESULT textrange_setstart(const IRichEditOleImpl *reole, LONG value, LONG *start, LONG *end) +static HRESULT textrange_setstart(const struct text_services *services, LONG value, LONG *start, LONG *end) { int len; @@ -1822,7 +1726,7 @@ static HRESULT textrange_setstart(const IRichEditOleImpl *reole, LONG value, LON return S_OK; } - len = ME_GetTextLength(reole->editor); + len = ME_GetTextLength(services->editor); *start = *end = value > len ? len : value; return S_OK; } @@ -1855,7 +1759,7 @@ static HRESULT WINAPI ITextRange_fnGetEnd(ITextRange *me, LONG *end) return S_OK; } -static HRESULT textrange_setend(const IRichEditOleImpl *reole, LONG value, LONG *start, LONG *end) +static HRESULT textrange_setend(const struct text_services *services, LONG value, LONG *start, LONG *end) { int len; @@ -1867,7 +1771,7 @@ static HRESULT textrange_setend(const IRichEditOleImpl *reole, LONG value, LONG return S_OK; } - len = ME_GetTextLength(reole->editor); + len = ME_GetTextLength( services->editor ); *end = value > len ? len + 1 : value; return S_OK; } @@ -4126,27 +4030,27 @@ static HRESULT create_textpara(ITextRange *range, ITextPara **ret) static HRESULT WINAPI ITextDocument2Old_fnQueryInterface(ITextDocument2Old* iface, REFIID riid, void **ppvObject) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - return IRichEditOle_QueryInterface(&This->IRichEditOle_iface, riid, ppvObject); + struct text_services *services = impl_from_ITextDocument2Old(iface); + return IUnknown_QueryInterface( services->outer_unk, riid, ppvObject ); } static ULONG WINAPI ITextDocument2Old_fnAddRef(ITextDocument2Old *iface) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - return IRichEditOle_AddRef(&This->IRichEditOle_iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); + return IUnknown_AddRef( services->outer_unk ); } static ULONG WINAPI ITextDocument2Old_fnRelease(ITextDocument2Old *iface) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - return IRichEditOle_Release(&This->IRichEditOle_iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); + return IUnknown_Release( services->outer_unk ); } static HRESULT WINAPI ITextDocument2Old_fnGetTypeInfoCount(ITextDocument2Old *iface, UINT *pctinfo) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - TRACE("(%p)->(%p)\n", This, pctinfo); + struct text_services *services = impl_from_ITextDocument2Old(iface); + TRACE("(%p)->(%p)\n", services, pctinfo); *pctinfo = 1; return S_OK; } @@ -4154,10 +4058,10 @@ static HRESULT WINAPI ITextDocument2Old_fnGetTypeInfoCount(ITextDocument2Old *if static HRESULT WINAPI ITextDocument2Old_fnGetTypeInfo(ITextDocument2Old *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); HRESULT hr; - TRACE("(%p)->(%u,%d,%p)\n", This, iTInfo, lcid, ppTInfo); + TRACE("(%p)->(%u,%d,%p)\n", services, iTInfo, lcid, ppTInfo); hr = get_typeinfo(ITextDocument_tid, ppTInfo); if (SUCCEEDED(hr)) @@ -4169,11 +4073,11 @@ static HRESULT WINAPI ITextDocument2Old_fnGetIDsOfNames(ITextDocument2Old *iface LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); ITypeInfo *ti; HRESULT hr; - TRACE("(%p)->(%s, %p, %u, %d, %p)\n", This, debugstr_guid(riid), + TRACE("(%p)->(%s, %p, %u, %d, %p)\n", services, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId); hr = get_typeinfo(ITextDocument_tid, &ti); @@ -4187,11 +4091,11 @@ static HRESULT WINAPI ITextDocument2Old_fnInvoke(ITextDocument2Old *iface, DISPI DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); ITypeInfo *ti; HRESULT hr; - TRACE("(%p)->(%d, %s, %d, %u, %p, %p, %p, %p)\n", This, dispIdMember, + TRACE("(%p)->(%d, %s, %d, %u, %p, %p, %p, %p)\n", services, dispIdMember, debugstr_guid(riid), lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); @@ -4203,142 +4107,144 @@ static HRESULT WINAPI ITextDocument2Old_fnInvoke(ITextDocument2Old *iface, DISPI static HRESULT WINAPI ITextDocument2Old_fnGetName(ITextDocument2Old *iface, BSTR *pName) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnGetSelection(ITextDocument2Old *iface, ITextSelection **selection) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); TRACE("(%p)->(%p)\n", iface, selection); if (!selection) return E_INVALIDARG; - if (!This->txtSel) { - This->txtSel = CreateTextSelection(This); - if (!This->txtSel) { - *selection = NULL; - return E_OUTOFMEMORY; - } + if (!services->text_selection) + { + services->text_selection = text_selection_create( services ); + if (!services->text_selection) + { + *selection = NULL; + return E_OUTOFMEMORY; + } } - *selection = &This->txtSel->ITextSelection_iface; + *selection = &services->text_selection->ITextSelection_iface; ITextSelection_AddRef(*selection); return S_OK; } static HRESULT WINAPI ITextDocument2Old_fnGetStoryCount(ITextDocument2Old *iface, LONG *pCount) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnGetStoryRanges(ITextDocument2Old *iface, ITextStoryRanges **ppStories) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnGetSaved(ITextDocument2Old *iface, LONG *pValue) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnSetSaved(ITextDocument2Old *iface, LONG Value) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnGetDefaultTabStop(ITextDocument2Old *iface, float *pValue) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnSetDefaultTabStop(ITextDocument2Old *iface, float Value) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnNew(ITextDocument2Old *iface) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnOpen(ITextDocument2Old *iface, VARIANT *pVar, LONG Flags, LONG CodePage) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnSave(ITextDocument2Old *iface, VARIANT *pVar, LONG Flags, LONG CodePage) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnFreeze(ITextDocument2Old *iface, LONG *pCount) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnUnfreeze(ITextDocument2Old *iface, LONG *pCount) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnBeginEditCollection(ITextDocument2Old *iface) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnEndEditCollection(ITextDocument2Old *iface) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnUndo(ITextDocument2Old *iface, LONG Count, LONG *prop) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnRedo(ITextDocument2Old *iface, LONG Count, LONG *prop) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } -static HRESULT CreateITextRange(IRichEditOleImpl *reOle, LONG start, LONG end, ITextRange** ppRange) +static HRESULT CreateITextRange(struct text_services *services, LONG start, LONG end, ITextRange** ppRange) { ITextRangeImpl *txtRge = heap_alloc(sizeof(ITextRangeImpl)); @@ -4346,10 +4252,10 @@ static HRESULT CreateITextRange(IRichEditOleImpl *reOle, LONG start, LONG end, I return E_OUTOFMEMORY; txtRge->ITextRange_iface.lpVtbl = &trvt; txtRge->ref = 1; - txtRge->child.reole = reOle; + txtRge->child.reole = services; txtRge->start = start; txtRge->end = end; - list_add_head(&reOle->rangelist, &txtRge->child.entry); + list_add_head( &services->rangelist, &txtRge->child.entry ); *ppRange = &txtRge->ITextRange_iface; return S_OK; } @@ -4357,84 +4263,84 @@ static HRESULT CreateITextRange(IRichEditOleImpl *reOle, LONG start, LONG end, I static HRESULT WINAPI ITextDocument2Old_fnRange(ITextDocument2Old *iface, LONG cp1, LONG cp2, ITextRange **ppRange) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - TRACE("%p %p %d %d\n", This, ppRange, cp1, cp2); + TRACE("%p %p %d %d\n", services, ppRange, cp1, cp2); if (!ppRange) return E_INVALIDARG; - cp2range(This->editor, &cp1, &cp2); - return CreateITextRange(This, cp1, cp2, ppRange); + cp2range(services->editor, &cp1, &cp2); + return CreateITextRange(services, cp1, cp2, ppRange); } static HRESULT WINAPI ITextDocument2Old_fnRangeFromPoint(ITextDocument2Old *iface, LONG x, LONG y, ITextRange **ppRange) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); - FIXME("stub %p\n",This); + struct text_services *services = impl_from_ITextDocument2Old(iface); + FIXME("stub %p\n", services); return E_NOTIMPL; } /* ITextDocument2Old methods */ static HRESULT WINAPI ITextDocument2Old_fnAttachMsgFilter(ITextDocument2Old *iface, IUnknown *filter) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(%p): stub\n", This, filter); + FIXME("(%p)->(%p): stub\n", services, filter); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnSetEffectColor(ITextDocument2Old *iface, LONG index, COLORREF cr) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(%d, 0x%x): stub\n", This, index, cr); + FIXME("(%p)->(%d, 0x%x): stub\n", services, index, cr); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnGetEffectColor(ITextDocument2Old *iface, LONG index, COLORREF *cr) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(%d, %p): stub\n", This, index, cr); + FIXME("(%p)->(%d, %p): stub\n", services, index, cr); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnGetCaretType(ITextDocument2Old *iface, LONG *type) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(%p): stub\n", This, type); + FIXME("(%p)->(%p): stub\n", services, type); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnSetCaretType(ITextDocument2Old *iface, LONG type) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(%d): stub\n", This, type); + FIXME("(%p)->(%d): stub\n", services, type); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnGetImmContext(ITextDocument2Old *iface, LONG *context) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(%p): stub\n", This, context); + FIXME("(%p)->(%p): stub\n", services, context); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnReleaseImmContext(ITextDocument2Old *iface, LONG context) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(%d): stub\n", This, context); + FIXME("(%p)->(%d): stub\n", services, context); return E_NOTIMPL; } @@ -4443,9 +4349,9 @@ static HRESULT WINAPI ITextDocument2Old_fnGetPreferredFont(ITextDocument2Old *if LONG options, LONG current_charrep, LONG current_fontsize, BSTR *bstr, LONG *pitch_family, LONG *new_fontsize) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(%d, %d, %d, %d, %d, %p, %p, %p): stub\n", This, cp, charrep, options, current_charrep, + FIXME("(%p)->(%d, %d, %d, %d, %d, %p, %p, %p): stub\n", services, cp, charrep, options, current_charrep, current_fontsize, bstr, pitch_family, new_fontsize); return E_NOTIMPL; @@ -4453,18 +4359,18 @@ static HRESULT WINAPI ITextDocument2Old_fnGetPreferredFont(ITextDocument2Old *if static HRESULT WINAPI ITextDocument2Old_fnGetNotificationMode(ITextDocument2Old *iface, LONG *mode) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(%p): stub\n", This, mode); + FIXME("(%p)->(%p): stub\n", services, mode); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnSetNotificationMode(ITextDocument2Old *iface, LONG mode) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(0x%x): stub\n", This, mode); + FIXME("(%p)->(0x%x): stub\n", services, mode); return E_NOTIMPL; } @@ -4472,95 +4378,96 @@ static HRESULT WINAPI ITextDocument2Old_fnSetNotificationMode(ITextDocument2Old static HRESULT WINAPI ITextDocument2Old_fnGetClientRect(ITextDocument2Old *iface, LONG type, LONG *left, LONG *top, LONG *right, LONG *bottom) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(%d, %p, %p, %p, %p): stub\n", This, type, left, top, right, bottom); + FIXME("(%p)->(%d, %p, %p, %p, %p): stub\n", services, type, left, top, right, bottom); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnGetSelectionEx(ITextDocument2Old *iface, ITextSelection **selection) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(%p): stub\n", This, selection); + FIXME("(%p)->(%p): stub\n", services, selection); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnGetWindow(ITextDocument2Old *iface, LONG *hwnd) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(%p): stub\n", This, hwnd); + FIXME("(%p)->(%p): stub\n", services, hwnd); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnGetFEFlags(ITextDocument2Old *iface, LONG *flags) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(%p): stub\n", This, flags); + FIXME("(%p)->(%p): stub\n", services, flags); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnUpdateWindow(ITextDocument2Old *iface) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p): stub\n", This); + FIXME("(%p): stub\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnCheckTextLimit(ITextDocument2Old *iface, LONG cch, LONG *exceed) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(%d, %p): stub\n", This, cch, exceed); + FIXME("(%p)->(%d, %p): stub\n", services, cch, exceed); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnIMEInProgress(ITextDocument2Old *iface, LONG mode) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(0x%x): stub\n", This, mode); + FIXME("(%p)->(0x%x): stub\n", services, mode); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnSysBeep(ITextDocument2Old *iface) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p): stub\n", This); + FIXME("(%p): stub\n", services); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnUpdate(ITextDocument2Old *iface, LONG mode) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(0x%x): stub\n", This, mode); + FIXME("(%p)->(0x%x): stub\n", services, mode); return E_NOTIMPL; } static HRESULT WINAPI ITextDocument2Old_fnNotify(ITextDocument2Old *iface, LONG notify) { - IRichEditOleImpl *This = impl_from_ITextDocument2Old(iface); + struct text_services *services = impl_from_ITextDocument2Old(iface); - FIXME("(%p)->(%d): stub\n", This, notify); + FIXME("(%p)->(%d): stub\n", services, notify); return E_NOTIMPL; } -static const ITextDocument2OldVtbl tdvt = { +const ITextDocument2OldVtbl text_doc2old_vtbl = +{ ITextDocument2Old_fnQueryInterface, ITextDocument2Old_fnAddRef, ITextDocument2Old_fnRelease, @@ -4616,7 +4523,7 @@ static HRESULT WINAPI ITextSelection_fnQueryInterface( REFIID riid, void **ppvObj) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); *ppvObj = NULL; if (IsEqualGUID(riid, &IID_IUnknown) @@ -4630,7 +4537,7 @@ static HRESULT WINAPI ITextSelection_fnQueryInterface( } else if (IsEqualGUID(riid, &IID_Igetrichole)) { - *ppvObj = This->reOle; + *ppvObj = This->services; return S_OK; } @@ -4639,13 +4546,13 @@ static HRESULT WINAPI ITextSelection_fnQueryInterface( static ULONG WINAPI ITextSelection_fnAddRef(ITextSelection *me) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); return InterlockedIncrement(&This->ref); } static ULONG WINAPI ITextSelection_fnRelease(ITextSelection *me) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ULONG ref = InterlockedDecrement(&This->ref); if (ref == 0) heap_free(This); @@ -4654,7 +4561,7 @@ static ULONG WINAPI ITextSelection_fnRelease(ITextSelection *me) static HRESULT WINAPI ITextSelection_fnGetTypeInfoCount(ITextSelection *me, UINT *pctinfo) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); TRACE("(%p)->(%p)\n", This, pctinfo); *pctinfo = 1; return S_OK; @@ -4663,7 +4570,7 @@ static HRESULT WINAPI ITextSelection_fnGetTypeInfoCount(ITextSelection *me, UINT static HRESULT WINAPI ITextSelection_fnGetTypeInfo(ITextSelection *me, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); HRESULT hr; TRACE("(%p)->(%u,%d,%p)\n", This, iTInfo, lcid, ppTInfo); @@ -4677,7 +4584,7 @@ static HRESULT WINAPI ITextSelection_fnGetTypeInfo(ITextSelection *me, UINT iTIn static HRESULT WINAPI ITextSelection_fnGetIDsOfNames(ITextSelection *me, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ITypeInfo *ti; HRESULT hr; @@ -4701,7 +4608,7 @@ static HRESULT WINAPI ITextSelection_fnInvoke( EXCEPINFO *pExcepInfo, UINT *puArgErr) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ITypeInfo *ti; HRESULT hr; @@ -4717,20 +4624,20 @@ static HRESULT WINAPI ITextSelection_fnInvoke( /*** ITextRange methods ***/ static HRESULT WINAPI ITextSelection_fnGetText(ITextSelection *me, BSTR *pbstr) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ME_Cursor *start = NULL, *end = NULL; int nChars, endOfs; BOOL bEOP; TRACE("(%p)->(%p)\n", This, pbstr); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; if (!pbstr) return E_INVALIDARG; - ME_GetSelection(This->reOle->editor, &start, &end); + ME_GetSelection(This->services->editor, &start, &end); endOfs = ME_GetCursorOfs(end); nChars = endOfs - ME_GetCursorOfs(start); if (!nChars) @@ -4743,8 +4650,8 @@ static HRESULT WINAPI ITextSelection_fnGetText(ITextSelection *me, BSTR *pbstr) if (!*pbstr) return E_OUTOFMEMORY; - bEOP = (!para_next( para_next( end->para ) ) && endOfs > ME_GetTextLength(This->reOle->editor)); - ME_GetTextW(This->reOle->editor, *pbstr, nChars, start, nChars, FALSE, bEOP); + bEOP = (!para_next( para_next( end->para ) ) && endOfs > ME_GetTextLength(This->services->editor)); + ME_GetTextW(This->services->editor, *pbstr, nChars, start, nChars, FALSE, bEOP); TRACE("%s\n", wine_dbgstr_w(*pbstr)); return S_OK; @@ -4752,50 +4659,50 @@ static HRESULT WINAPI ITextSelection_fnGetText(ITextSelection *me, BSTR *pbstr) static HRESULT WINAPI ITextSelection_fnSetText(ITextSelection *me, BSTR str) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ME_TextEditor *editor; int len, to, from; TRACE("(%p)->(%s)\n", This, debugstr_w(str)); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; - editor = This->reOle->editor; + editor = This->services->editor; len = lstrlenW(str); ME_GetSelectionOfs(editor, &from, &to); ME_ReplaceSel(editor, FALSE, str, len); if (len < to - from) - textranges_update_ranges(This->reOle, from, len, RANGE_UPDATE_DELETE); + textranges_update_ranges(This->services, from, len, RANGE_UPDATE_DELETE); return S_OK; } static HRESULT WINAPI ITextSelection_fnGetChar(ITextSelection *me, LONG *pch) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ME_Cursor *start = NULL, *end = NULL; TRACE("(%p)->(%p)\n", This, pch); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; if (!pch) return E_INVALIDARG; - ME_GetSelection(This->reOle->editor, &start, &end); - return range_GetChar(This->reOle->editor, start, pch); + ME_GetSelection(This->services->editor, &start, &end); + return range_GetChar(This->services->editor, start, pch); } static HRESULT WINAPI ITextSelection_fnSetChar(ITextSelection *me, LONG ch) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%x): stub\n", This, ch); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -4803,12 +4710,12 @@ static HRESULT WINAPI ITextSelection_fnSetChar(ITextSelection *me, LONG ch) static HRESULT WINAPI ITextSelection_fnGetDuplicate(ITextSelection *me, ITextRange **range) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); LONG start, end; TRACE("(%p)->(%p)\n", This, range); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; if (!range) @@ -4816,16 +4723,16 @@ static HRESULT WINAPI ITextSelection_fnGetDuplicate(ITextSelection *me, ITextRan ITextSelection_GetStart(me, &start); ITextSelection_GetEnd(me, &end); - return CreateITextRange(This->reOle, start, end, range); + return CreateITextRange(This->services, start, end, range); } static HRESULT WINAPI ITextSelection_fnGetFormattedText(ITextSelection *me, ITextRange **range) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%p): stub\n", This, range); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -4833,11 +4740,11 @@ static HRESULT WINAPI ITextSelection_fnGetFormattedText(ITextSelection *me, ITex static HRESULT WINAPI ITextSelection_fnSetFormattedText(ITextSelection *me, ITextRange *range) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%p): stub\n", This, range); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; FIXME("not implemented\n"); @@ -4846,83 +4753,83 @@ static HRESULT WINAPI ITextSelection_fnSetFormattedText(ITextSelection *me, ITex static HRESULT WINAPI ITextSelection_fnGetStart(ITextSelection *me, LONG *pcpFirst) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); LONG lim; TRACE("(%p)->(%p)\n", This, pcpFirst); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; if (!pcpFirst) return E_INVALIDARG; - ME_GetSelectionOfs(This->reOle->editor, pcpFirst, &lim); + ME_GetSelectionOfs(This->services->editor, pcpFirst, &lim); return S_OK; } static HRESULT WINAPI ITextSelection_fnSetStart(ITextSelection *me, LONG value) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); LONG start, end; HRESULT hr; TRACE("(%p)->(%d)\n", This, value); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; - ME_GetSelectionOfs(This->reOle->editor, &start, &end); - hr = textrange_setstart(This->reOle, value, &start, &end); + ME_GetSelectionOfs(This->services->editor, &start, &end); + hr = textrange_setstart(This->services, value, &start, &end); if (hr == S_OK) - set_selection(This->reOle->editor, start, end); + set_selection(This->services->editor, start, end); return hr; } static HRESULT WINAPI ITextSelection_fnGetEnd(ITextSelection *me, LONG *pcpLim) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); LONG first; TRACE("(%p)->(%p)\n", This, pcpLim); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; if (!pcpLim) return E_INVALIDARG; - ME_GetSelectionOfs(This->reOle->editor, &first, pcpLim); + ME_GetSelectionOfs(This->services->editor, &first, pcpLim); return S_OK; } static HRESULT WINAPI ITextSelection_fnSetEnd(ITextSelection *me, LONG value) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); LONG start, end; HRESULT hr; TRACE("(%p)->(%d)\n", This, value); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; - ME_GetSelectionOfs(This->reOle->editor, &start, &end); - hr = textrange_setend(This->reOle, value, &start, &end); + ME_GetSelectionOfs(This->services->editor, &start, &end); + hr = textrange_setend(This->services, value, &start, &end); if (hr == S_OK) - set_selection(This->reOle->editor, start, end); + set_selection(This->services->editor, start, end); return hr; } static HRESULT WINAPI ITextSelection_fnGetFont(ITextSelection *me, ITextFont **font) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ITextRange *range = NULL; HRESULT hr; TRACE("(%p)->(%p)\n", This, font); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; if (!font) @@ -4936,7 +4843,7 @@ static HRESULT WINAPI ITextSelection_fnGetFont(ITextSelection *me, ITextFont **f static HRESULT WINAPI ITextSelection_fnSetFont(ITextSelection *me, ITextFont *font) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ITextRange *range = NULL; TRACE("(%p)->(%p)\n", This, font); @@ -4944,7 +4851,7 @@ static HRESULT WINAPI ITextSelection_fnSetFont(ITextSelection *me, ITextFont *fo if (!font) return E_INVALIDARG; - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; ITextSelection_QueryInterface(me, &IID_ITextRange, (void**)&range); @@ -4955,13 +4862,13 @@ static HRESULT WINAPI ITextSelection_fnSetFont(ITextSelection *me, ITextFont *fo static HRESULT WINAPI ITextSelection_fnGetPara(ITextSelection *me, ITextPara **para) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ITextRange *range = NULL; HRESULT hr; TRACE("(%p)->(%p)\n", This, para); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; if (!para) @@ -4975,11 +4882,11 @@ static HRESULT WINAPI ITextSelection_fnGetPara(ITextSelection *me, ITextPara **p static HRESULT WINAPI ITextSelection_fnSetPara(ITextSelection *me, ITextPara *para) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%p): stub\n", This, para); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; FIXME("not implemented\n"); @@ -4988,23 +4895,23 @@ static HRESULT WINAPI ITextSelection_fnSetPara(ITextSelection *me, ITextPara *pa static HRESULT WINAPI ITextSelection_fnGetStoryLength(ITextSelection *me, LONG *length) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); TRACE("(%p)->(%p)\n", This, length); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; - return textrange_get_storylength(This->reOle->editor, length); + return textrange_get_storylength(This->services->editor, length); } static HRESULT WINAPI ITextSelection_fnGetStoryType(ITextSelection *me, LONG *value) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); TRACE("(%p)->(%p)\n", This, value); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; if (!value) @@ -5016,31 +4923,31 @@ static HRESULT WINAPI ITextSelection_fnGetStoryType(ITextSelection *me, LONG *va static HRESULT WINAPI ITextSelection_fnCollapse(ITextSelection *me, LONG bStart) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); LONG start, end; HRESULT hres; TRACE("(%p)->(%d)\n", This, bStart); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; - ME_GetSelectionOfs(This->reOle->editor, &start, &end); + ME_GetSelectionOfs(This->services->editor, &start, &end); hres = range_Collapse(bStart, &start, &end); if (SUCCEEDED(hres)) - set_selection(This->reOle->editor, start, end); + set_selection(This->services->editor, start, end); return hres; } static HRESULT WINAPI ITextSelection_fnExpand(ITextSelection *me, LONG unit, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ITextRange *range = NULL; HRESULT hr; TRACE("(%p)->(%d %p)\n", This, unit, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; ITextSelection_QueryInterface(me, &IID_ITextRange, (void**)&range); @@ -5051,11 +4958,11 @@ static HRESULT WINAPI ITextSelection_fnExpand(ITextSelection *me, LONG unit, LON static HRESULT WINAPI ITextSelection_fnGetIndex(ITextSelection *me, LONG unit, LONG *index) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%d %p): stub\n", This, unit, index); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5064,11 +4971,11 @@ static HRESULT WINAPI ITextSelection_fnGetIndex(ITextSelection *me, LONG unit, L static HRESULT WINAPI ITextSelection_fnSetIndex(ITextSelection *me, LONG unit, LONG index, LONG extend) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%d %d %d): stub\n", This, unit, index, extend); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5076,11 +4983,11 @@ static HRESULT WINAPI ITextSelection_fnSetIndex(ITextSelection *me, LONG unit, L static HRESULT WINAPI ITextSelection_fnSetRange(ITextSelection *me, LONG anchor, LONG active) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%d %d): stub\n", This, anchor, active); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5088,7 +4995,7 @@ static HRESULT WINAPI ITextSelection_fnSetRange(ITextSelection *me, LONG anchor, static HRESULT WINAPI ITextSelection_fnInRange(ITextSelection *me, ITextRange *range, LONG *ret) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ITextSelection *selection = NULL; LONG start, end; @@ -5097,7 +5004,7 @@ static HRESULT WINAPI ITextSelection_fnInRange(ITextSelection *me, ITextRange *r if (ret) *ret = tomFalse; - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; if (!range) @@ -5115,11 +5022,11 @@ static HRESULT WINAPI ITextSelection_fnInRange(ITextSelection *me, ITextRange *r static HRESULT WINAPI ITextSelection_fnInStory(ITextSelection *me, ITextRange *range, LONG *ret) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%p %p): stub\n", This, range, ret); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5127,7 +5034,7 @@ static HRESULT WINAPI ITextSelection_fnInStory(ITextSelection *me, ITextRange *r static HRESULT WINAPI ITextSelection_fnIsEqual(ITextSelection *me, ITextRange *range, LONG *ret) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ITextSelection *selection = NULL; LONG start, end; @@ -5136,7 +5043,7 @@ static HRESULT WINAPI ITextSelection_fnIsEqual(ITextSelection *me, ITextRange *r if (ret) *ret = tomFalse; - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; if (!range) @@ -5154,11 +5061,11 @@ static HRESULT WINAPI ITextSelection_fnIsEqual(ITextSelection *me, ITextRange *r static HRESULT WINAPI ITextSelection_fnSelect(ITextSelection *me) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); TRACE("(%p)\n", This); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; /* nothing to do */ @@ -5168,13 +5075,13 @@ static HRESULT WINAPI ITextSelection_fnSelect(ITextSelection *me) static HRESULT WINAPI ITextSelection_fnStartOf(ITextSelection *me, LONG unit, LONG extend, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ITextRange *range = NULL; HRESULT hr; TRACE("(%p)->(%d %d %p)\n", This, unit, extend, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; ITextSelection_QueryInterface(me, &IID_ITextRange, (void**)&range); @@ -5186,34 +5093,34 @@ static HRESULT WINAPI ITextSelection_fnStartOf(ITextSelection *me, LONG unit, LO static HRESULT WINAPI ITextSelection_fnEndOf(ITextSelection *me, LONG unit, LONG extend, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ITextRange *range = NULL; HRESULT hr; TRACE("(%p)->(%d %d %p)\n", This, unit, extend, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; ITextSelection_QueryInterface(me, &IID_ITextRange, (void**)&range); - hr = textrange_endof(range, This->reOle->editor, unit, extend, delta); + hr = textrange_endof(range, This->services->editor, unit, extend, delta); ITextRange_Release(range); return hr; } static HRESULT WINAPI ITextSelection_fnMove(ITextSelection *me, LONG unit, LONG count, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ITextRange *range = NULL; HRESULT hr; TRACE("(%p)->(%d %d %p)\n", This, unit, count, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; ITextSelection_QueryInterface(me, &IID_ITextRange, (void**)&range); - hr = textrange_movestart(range, This->reOle->editor, unit, count, delta); + hr = textrange_movestart(range, This->services->editor, unit, count, delta); ITextRange_Release(range); return hr; } @@ -5221,17 +5128,17 @@ static HRESULT WINAPI ITextSelection_fnMove(ITextSelection *me, LONG unit, LONG static HRESULT WINAPI ITextSelection_fnMoveStart(ITextSelection *me, LONG unit, LONG count, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ITextRange *range = NULL; HRESULT hr; TRACE("(%p)->(%d %d %p)\n", This, unit, count, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; ITextSelection_QueryInterface(me, &IID_ITextRange, (void**)&range); - hr = textrange_movestart(range, This->reOle->editor, unit, count, delta); + hr = textrange_movestart(range, This->services->editor, unit, count, delta); ITextRange_Release(range); return hr; } @@ -5239,17 +5146,17 @@ static HRESULT WINAPI ITextSelection_fnMoveStart(ITextSelection *me, LONG unit, static HRESULT WINAPI ITextSelection_fnMoveEnd(ITextSelection *me, LONG unit, LONG count, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ITextRange *range = NULL; HRESULT hr; TRACE("(%p)->(%d %d %p)\n", This, unit, count, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; ITextSelection_QueryInterface(me, &IID_ITextRange, (void**)&range); - hr = textrange_moveend(range, This->reOle->editor, unit, count, delta); + hr = textrange_moveend(range, This->services->editor, unit, count, delta); ITextRange_Release(range); return hr; } @@ -5257,11 +5164,11 @@ static HRESULT WINAPI ITextSelection_fnMoveEnd(ITextSelection *me, LONG unit, LO static HRESULT WINAPI ITextSelection_fnMoveWhile(ITextSelection *me, VARIANT *charset, LONG count, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%s %d %p): stub\n", This, debugstr_variant(charset), count, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5270,11 +5177,11 @@ static HRESULT WINAPI ITextSelection_fnMoveWhile(ITextSelection *me, VARIANT *ch static HRESULT WINAPI ITextSelection_fnMoveStartWhile(ITextSelection *me, VARIANT *charset, LONG count, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%s %d %p): stub\n", This, debugstr_variant(charset), count, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5283,11 +5190,11 @@ static HRESULT WINAPI ITextSelection_fnMoveStartWhile(ITextSelection *me, VARIAN static HRESULT WINAPI ITextSelection_fnMoveEndWhile(ITextSelection *me, VARIANT *charset, LONG count, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%s %d %p): stub\n", This, debugstr_variant(charset), count, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5296,11 +5203,11 @@ static HRESULT WINAPI ITextSelection_fnMoveEndWhile(ITextSelection *me, VARIANT static HRESULT WINAPI ITextSelection_fnMoveUntil(ITextSelection *me, VARIANT *charset, LONG count, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%s %d %p): stub\n", This, debugstr_variant(charset), count, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5309,11 +5216,11 @@ static HRESULT WINAPI ITextSelection_fnMoveUntil(ITextSelection *me, VARIANT *ch static HRESULT WINAPI ITextSelection_fnMoveStartUntil(ITextSelection *me, VARIANT *charset, LONG count, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%s %d %p): stub\n", This, debugstr_variant(charset), count, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5322,11 +5229,11 @@ static HRESULT WINAPI ITextSelection_fnMoveStartUntil(ITextSelection *me, VARIAN static HRESULT WINAPI ITextSelection_fnMoveEndUntil(ITextSelection *me, VARIANT *charset, LONG count, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%s %d %p): stub\n", This, debugstr_variant(charset), count, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5335,11 +5242,11 @@ static HRESULT WINAPI ITextSelection_fnMoveEndUntil(ITextSelection *me, VARIANT static HRESULT WINAPI ITextSelection_fnFindText(ITextSelection *me, BSTR text, LONG count, LONG flags, LONG *length) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%s %d %x %p): stub\n", This, debugstr_w(text), count, flags, length); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; FIXME("not implemented\n"); @@ -5349,11 +5256,11 @@ static HRESULT WINAPI ITextSelection_fnFindText(ITextSelection *me, BSTR text, L static HRESULT WINAPI ITextSelection_fnFindTextStart(ITextSelection *me, BSTR text, LONG count, LONG flags, LONG *length) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%s %d %x %p): stub\n", This, debugstr_w(text), count, flags, length); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5362,11 +5269,11 @@ static HRESULT WINAPI ITextSelection_fnFindTextStart(ITextSelection *me, BSTR te static HRESULT WINAPI ITextSelection_fnFindTextEnd(ITextSelection *me, BSTR text, LONG count, LONG flags, LONG *length) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%s %d %x %p): stub\n", This, debugstr_w(text), count, flags, length); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5375,11 +5282,11 @@ static HRESULT WINAPI ITextSelection_fnFindTextEnd(ITextSelection *me, BSTR text static HRESULT WINAPI ITextSelection_fnDelete(ITextSelection *me, LONG unit, LONG count, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%d %d %p): stub\n", This, unit, count, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5387,45 +5294,45 @@ static HRESULT WINAPI ITextSelection_fnDelete(ITextSelection *me, LONG unit, LON static HRESULT WINAPI ITextSelection_fnCut(ITextSelection *me, VARIANT *v) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ITextRange *range = NULL; HRESULT hr; TRACE("(%p)->(%p): stub\n", This, v); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; ITextSelection_QueryInterface(me, &IID_ITextRange, (void**)&range); - hr = textrange_copy_or_cut(range, This->reOle->editor, TRUE, v); + hr = textrange_copy_or_cut(range, This->services->editor, TRUE, v); ITextRange_Release(range); return hr; } static HRESULT WINAPI ITextSelection_fnCopy(ITextSelection *me, VARIANT *v) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); ITextRange *range = NULL; HRESULT hr; TRACE("(%p)->(%p)\n", This, v); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; ITextSelection_QueryInterface(me, &IID_ITextRange, (void**)&range); - hr = textrange_copy_or_cut(range, This->reOle->editor, FALSE, v); + hr = textrange_copy_or_cut(range, This->services->editor, FALSE, v); ITextRange_Release(range); return hr; } static HRESULT WINAPI ITextSelection_fnPaste(ITextSelection *me, VARIANT *v, LONG format) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%s %x): stub\n", This, debugstr_variant(v), format); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5434,11 +5341,11 @@ static HRESULT WINAPI ITextSelection_fnPaste(ITextSelection *me, VARIANT *v, LON static HRESULT WINAPI ITextSelection_fnCanPaste(ITextSelection *me, VARIANT *v, LONG format, LONG *ret) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%s %x %p): stub\n", This, debugstr_variant(v), format, ret); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5446,11 +5353,11 @@ static HRESULT WINAPI ITextSelection_fnCanPaste(ITextSelection *me, VARIANT *v, static HRESULT WINAPI ITextSelection_fnCanEdit(ITextSelection *me, LONG *ret) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%p): stub\n", This, ret); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5458,11 +5365,11 @@ static HRESULT WINAPI ITextSelection_fnCanEdit(ITextSelection *me, LONG *ret) static HRESULT WINAPI ITextSelection_fnChangeCase(ITextSelection *me, LONG type) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%d): stub\n", This, type); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5470,11 +5377,11 @@ static HRESULT WINAPI ITextSelection_fnChangeCase(ITextSelection *me, LONG type) static HRESULT WINAPI ITextSelection_fnGetPoint(ITextSelection *me, LONG type, LONG *cx, LONG *cy) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%d %p %p): stub\n", This, type, cx, cy); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5483,11 +5390,11 @@ static HRESULT WINAPI ITextSelection_fnGetPoint(ITextSelection *me, LONG type, L static HRESULT WINAPI ITextSelection_fnSetPoint(ITextSelection *me, LONG x, LONG y, LONG type, LONG extend) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%d %d %d %d): stub\n", This, x, y, type, extend); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5495,11 +5402,11 @@ static HRESULT WINAPI ITextSelection_fnSetPoint(ITextSelection *me, LONG x, LONG static HRESULT WINAPI ITextSelection_fnScrollIntoView(ITextSelection *me, LONG value) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%d): stub\n", This, value); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5507,11 +5414,11 @@ static HRESULT WINAPI ITextSelection_fnScrollIntoView(ITextSelection *me, LONG v static HRESULT WINAPI ITextSelection_fnGetEmbeddedObject(ITextSelection *me, IUnknown **ppv) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%p): stub\n", This, ppv); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5520,11 +5427,11 @@ static HRESULT WINAPI ITextSelection_fnGetEmbeddedObject(ITextSelection *me, IUn /*** ITextSelection methods ***/ static HRESULT WINAPI ITextSelection_fnGetFlags(ITextSelection *me, LONG *flags) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%p): stub\n", This, flags); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5532,11 +5439,11 @@ static HRESULT WINAPI ITextSelection_fnGetFlags(ITextSelection *me, LONG *flags) static HRESULT WINAPI ITextSelection_fnSetFlags(ITextSelection *me, LONG flags) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%x): stub\n", This, flags); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5544,11 +5451,11 @@ static HRESULT WINAPI ITextSelection_fnSetFlags(ITextSelection *me, LONG flags) static HRESULT WINAPI ITextSelection_fnGetType(ITextSelection *me, LONG *type) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%p): stub\n", This, type); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5557,11 +5464,11 @@ static HRESULT WINAPI ITextSelection_fnGetType(ITextSelection *me, LONG *type) static HRESULT WINAPI ITextSelection_fnMoveLeft(ITextSelection *me, LONG unit, LONG count, LONG extend, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%d %d %d %p): stub\n", This, unit, count, extend, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5570,11 +5477,11 @@ static HRESULT WINAPI ITextSelection_fnMoveLeft(ITextSelection *me, LONG unit, L static HRESULT WINAPI ITextSelection_fnMoveRight(ITextSelection *me, LONG unit, LONG count, LONG extend, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%d %d %d %p): stub\n", This, unit, count, extend, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5583,11 +5490,11 @@ static HRESULT WINAPI ITextSelection_fnMoveRight(ITextSelection *me, LONG unit, static HRESULT WINAPI ITextSelection_fnMoveUp(ITextSelection *me, LONG unit, LONG count, LONG extend, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%d %d %d %p): stub\n", This, unit, count, extend, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5596,11 +5503,11 @@ static HRESULT WINAPI ITextSelection_fnMoveUp(ITextSelection *me, LONG unit, LON static HRESULT WINAPI ITextSelection_fnMoveDown(ITextSelection *me, LONG unit, LONG count, LONG extend, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%d %d %d %p): stub\n", This, unit, count, extend, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5609,11 +5516,11 @@ static HRESULT WINAPI ITextSelection_fnMoveDown(ITextSelection *me, LONG unit, L static HRESULT WINAPI ITextSelection_fnHomeKey(ITextSelection *me, LONG unit, LONG extend, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%d %d %p): stub\n", This, unit, extend, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5622,11 +5529,11 @@ static HRESULT WINAPI ITextSelection_fnHomeKey(ITextSelection *me, LONG unit, LO static HRESULT WINAPI ITextSelection_fnEndKey(ITextSelection *me, LONG unit, LONG extend, LONG *delta) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%d %d %p): stub\n", This, unit, extend, delta); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5634,11 +5541,11 @@ static HRESULT WINAPI ITextSelection_fnEndKey(ITextSelection *me, LONG unit, LON static HRESULT WINAPI ITextSelection_fnTypeText(ITextSelection *me, BSTR text) { - ITextSelectionImpl *This = impl_from_ITextSelection(me); + struct text_selection *This = impl_from_ITextSelection(me); FIXME("(%p)->(%s): stub\n", This, debugstr_w(text)); - if (!This->reOle) + if (!This->services) return CO_E_RELEASED; return E_NOTIMPL; @@ -5715,46 +5622,18 @@ static const ITextSelectionVtbl tsvt = { ITextSelection_fnTypeText }; -static ITextSelectionImpl * -CreateTextSelection(IRichEditOleImpl *reOle) +static struct text_selection *text_selection_create(struct text_services *services) { - ITextSelectionImpl *txtSel = heap_alloc(sizeof *txtSel); + struct text_selection *txtSel = heap_alloc(sizeof *txtSel); if (!txtSel) return NULL; txtSel->ITextSelection_iface.lpVtbl = &tsvt; txtSel->ref = 1; - txtSel->reOle = reOle; + txtSel->services = services; return txtSel; } -LRESULT CreateIRichEditOle(IUnknown *outer_unk, ME_TextEditor *editor, LPVOID *ppvObj) -{ - IRichEditOleImpl *reo; - - reo = heap_alloc(sizeof(IRichEditOleImpl)); - if (!reo) - return 0; - - reo->IUnknown_inner.lpVtbl = &reo_unk_vtbl; - reo->IRichEditOle_iface.lpVtbl = &revt; - reo->ITextDocument2Old_iface.lpVtbl = &tdvt; - reo->ref = 1; - reo->editor = editor; - reo->txtSel = NULL; - - TRACE("Created %p\n",reo); - list_init(&reo->rangelist); - list_init(&reo->clientsites); - if (outer_unk) - reo->outer_unk = outer_unk; - else - reo->outer_unk = &reo->IUnknown_inner; - *ppvObj = &reo->IUnknown_inner; - - return 1; -} - static void convert_sizel(const ME_Context *c, const SIZEL* szl, SIZE* sz) { /* sizel is in .01 millimeters, sz in pixels */ @@ -5970,3 +5849,21 @@ void ME_CopyReObject(REOBJECT *dst, const REOBJECT *src, DWORD flags) IOleClientSite_AddRef(dst->polesite); } } + +void richole_release_children( struct text_services *services ) +{ + ITextRangeImpl *range; + IOleClientSiteImpl *site; + + if (services->text_selection) + { + services->text_selection->services = NULL; + ITextSelection_Release( &services->text_selection->ITextSelection_iface ); + } + + LIST_FOR_EACH_ENTRY( range, &services->rangelist, ITextRangeImpl, child.entry ) + range->child.reole = NULL; + + LIST_FOR_EACH_ENTRY( site, &services->clientsites, IOleClientSiteImpl, child.entry ) + site->child.reole = NULL; +} diff --git a/dlls/riched20/txtsrv.c b/dlls/riched20/txtsrv.c index 80e4682880f..73b8d3ea7e9 100644 --- a/dlls/riched20/txtsrv.c +++ b/dlls/riched20/txtsrv.c @@ -32,16 +32,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(richedit); -struct text_services -{ - IUnknown IUnknown_inner; - ITextServices ITextServices_iface; - IUnknown *outer_unk; - LONG ref; - ME_TextEditor *editor; - char spare[256]; /* for bug #12179 */ -}; - static inline struct text_services *impl_from_IUnknown( IUnknown *iface ) { return CONTAINING_RECORD( iface, struct text_services, IUnknown_inner ); @@ -55,13 +45,10 @@ static HRESULT WINAPI ITextServicesImpl_QueryInterface( IUnknown *iface, REFIID if (IsEqualIID( iid, &IID_IUnknown )) *obj = &services->IUnknown_inner; else if (IsEqualIID( iid, &IID_ITextServices )) *obj = &services->ITextServices_iface; - else if (IsEqualIID( iid, &IID_IRichEditOle ) || IsEqualIID( iid, &IID_ITextDocument ) || - IsEqualIID( iid, &IID_ITextDocument2Old )) - { - if (!services->editor->reOle && !CreateIRichEditOle( services->outer_unk, services->editor, (void **)&services->editor->reOle )) - return E_OUTOFMEMORY; - return IUnknown_QueryInterface( services->editor->reOle, iid, obj ); - } + else if (IsEqualIID( iid, &IID_IRichEditOle )) *obj= &services->IRichEditOle_iface; + else if (IsEqualIID( iid, &IID_IDispatch ) || + IsEqualIID( iid, &IID_ITextDocument ) || + IsEqualIID( iid, &IID_ITextDocument2Old )) *obj = &services->ITextDocument2Old_iface; else { *obj = NULL; @@ -92,6 +79,7 @@ static ULONG WINAPI ITextServicesImpl_Release(IUnknown *iface) if (!ref) { + richole_release_children( services ); ME_DestroyEditor( services->editor ); CoTaskMemFree( services ); } @@ -597,11 +585,18 @@ HRESULT create_text_services( IUnknown *outer, ITextHost *text_host, IUnknown ** services->ref = 1; services->IUnknown_inner.lpVtbl = &textservices_inner_vtbl; services->ITextServices_iface.lpVtbl = &textservices_vtbl; + services->IRichEditOle_iface.lpVtbl = &re_ole_vtbl; + services->ITextDocument2Old_iface.lpVtbl = &text_doc2old_vtbl; services->editor = ME_MakeEditor( text_host, emulate_10 ); + services->editor->richole = &services->IRichEditOle_iface; if (outer) services->outer_unk = outer; else services->outer_unk = &services->IUnknown_inner; + services->text_selection = NULL; + list_init( &services->rangelist ); + list_init( &services->clientsites ); + *unk = &services->IUnknown_inner; return S_OK; }