[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    [PATCH 2/2] riched20: Implement callback to IRichEditOleCallback_QueryInsertObject.
From:       Jinoh Kang <jinoh.kang.kr () gmail ! com>
Date:       2022-03-31 14:39:56
Message-ID: e94c587a-1a9b-5284-dc1f-ad909c3c3542 () gmail ! com
[Download RAW message or body]

Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>
---
 dlls/riched20/caret.c         | 11 ++++++++++-
 dlls/riched20/editor.c        |  3 +--
 dlls/riched20/editor.h        |  2 +-
 dlls/riched20/richole.c       |  6 +++++-
 dlls/riched20/tests/richole.c |  6 ++----
 5 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/dlls/riched20/caret.c b/dlls/riched20/caret.c
index c8658098e18..09ec0ffc735 100644
--- a/dlls/riched20/caret.c
+++ b/dlls/riched20/caret.c
@@ -456,13 +456,21 @@ static struct re_object* create_re_object(const REOBJECT *reo, \
ME_Run *run)  return reobj;
 }
 
-void editor_insert_oleobj(ME_TextEditor *editor, const REOBJECT *reo)
+HRESULT editor_insert_oleobj(ME_TextEditor *editor, const REOBJECT *reo)
 {
   ME_Run *run, *prev;
   const WCHAR space = ' ';
   struct re_object *reobj_prev = NULL;
   ME_Cursor *cursor, cursor_from_ofs;
   ME_Style *style;
+  HRESULT hr;
+
+  if (editor->lpOleCallback)
+  {
+    hr = IRichEditOleCallback_QueryInsertObject(editor->lpOleCallback, \
(LPCLSID)&reo->clsid, reo->pstg, REO_CP_SELECTION); +    if (hr != S_OK)
+      return hr;
+  }
 
   if (reo->cp == REO_CP_SELECTION)
     cursor = editor->pCursors;
@@ -495,6 +503,7 @@ void editor_insert_oleobj(ME_TextEditor *editor, const REOBJECT \
*reo)  list_add_head(&editor->reobj_list, &run->reobj->entry);
 
   ME_ReleaseStyle( style );
+  return S_OK;
 }
 
 
diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c
index a8cf3175591..3628e51ac9b 100644
--- a/dlls/riched20/editor.c
+++ b/dlls/riched20/editor.c
@@ -1171,8 +1171,7 @@ static HRESULT insert_static_object(ME_TextEditor *editor, \
HENHMETAFILE hemf, HB  reobject.dwFlags = 0; /* FIXME */
     reobject.dwUser = 0;
 
-    editor_insert_oleobj(editor, &reobject);
-    hr = S_OK;
+    hr = editor_insert_oleobj(editor, &reobject);
   }
 
   if (lpObject)       IOleObject_Release(lpObject);
diff --git a/dlls/riched20/editor.h b/dlls/riched20/editor.h
index e0df63ae92d..3028d9bdbd5 100644
--- a/dlls/riched20/editor.h
+++ b/dlls/riched20/editor.h
@@ -187,7 +187,7 @@ int ME_GetSelection(ME_TextEditor *editor, ME_Cursor **from, \
ME_Cursor **to) DEC  BOOL ME_IsSelection(ME_TextEditor *editor) DECLSPEC_HIDDEN;
 void ME_DeleteSelection(ME_TextEditor *editor) DECLSPEC_HIDDEN;
 void ME_SendSelChange(ME_TextEditor *editor) DECLSPEC_HIDDEN;
-void editor_insert_oleobj( ME_TextEditor *editor, const REOBJECT *reo ) \
DECLSPEC_HIDDEN; +HRESULT editor_insert_oleobj( ME_TextEditor *editor, const REOBJECT \
*reo ) DECLSPEC_HIDDEN;  BOOL ME_InternalDeleteText(ME_TextEditor *editor, ME_Cursor \
*start, int nChars, BOOL bForce) DECLSPEC_HIDDEN;  int ME_GetTextLength(ME_TextEditor \
*editor) DECLSPEC_HIDDEN;  int ME_GetTextLengthEx(ME_TextEditor *editor, const \
                GETTEXTLENGTHEX *how) DECLSPEC_HIDDEN;
diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c
index a23f4c82730..936f1c928b3 100644
--- a/dlls/riched20/richole.c
+++ b/dlls/riched20/richole.c
@@ -1361,6 +1361,7 @@ static HRESULT WINAPI
 IRichEditOle_fnInsertObject(IRichEditOle *iface, REOBJECT *reo)
 {
     struct text_services *services = impl_from_IRichEditOle( iface );
+    HRESULT hr;
 
     TRACE("(%p,%p)\n", services, reo);
 
@@ -1369,7 +1370,10 @@ IRichEditOle_fnInsertObject(IRichEditOle *iface, REOBJECT \
*reo)  
     if (reo->cbStruct < sizeof(*reo)) return STG_E_INVALIDPARAMETER;
 
-    editor_insert_oleobj(services->editor, reo);
+    hr = editor_insert_oleobj(services->editor, reo);
+    if (hr != S_OK)
+        return hr;
+
     ME_CommitUndo(services->editor);
     ME_UpdateRepaint(services->editor, FALSE);
     return S_OK;
diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c
index bb99a9a7276..75671bb4482 100644
--- a/dlls/riched20/tests/richole.c
+++ b/dlls/riched20/tests/richole.c
@@ -3403,7 +3403,7 @@ static void _insert_reobject(struct IRichEditOleCallbackImpl \
*callback, IRichEdi  IOleClientSite *clientsite;
   HRESULT hr;
 
-  olecb_expect_QueryInsertObject(callback, line, EXPECT_TODO_WINE | 1, &CLSID_NULL, \
NULL, REO_CP_SELECTION /* cp overriden */, S_OK); +  \
olecb_expect_QueryInsertObject(callback, line, 1, &CLSID_NULL, NULL, REO_CP_SELECTION \
/* cp overriden */, S_OK);  hr = IRichEditOle_GetClientSite(reole, &clientsite);
   ok_(__FILE__,line)(hr == S_OK, "IRichEditOle_GetClientSite got hr %#lx.\n", hr);
   fill_reobject_struct(reobj, cp, NULL, NULL, clientsite, 10, 10, DVASPECT_CONTENT, \
0, user); @@ -3477,17 +3477,15 @@ static void subtest_InsertObject(struct \
IRichEditOleCallbackImpl *callback)  hr = IRichEditOle_GetClientSite(reole, \
&clientsite);  ok(hr == S_OK, "IRichEditOle_GetClientSite got hr %#lx.\n", hr);
 
-    olecb_expect_QueryInsertObject(callback, __LINE__, EXPECT_TODO_WINE | 1, \
&CLSID_NULL, NULL, REO_CP_SELECTION, S_FALSE); +    \
olecb_expect_QueryInsertObject(callback, __LINE__, 1, &CLSID_NULL, NULL, \
                REO_CP_SELECTION, S_FALSE);
     fill_reobject_struct(&reobj, REO_CP_SELECTION, NULL, NULL, clientsite, 10, 10, \
DVASPECT_CONTENT, 0, 0);  hr = IRichEditOle_InsertObject(reole, &reobj);
-    todo_wine
     ok(hr == S_FALSE, "IRichEditOle_InsertObject got hr %#lx.\n", hr);
     olecb_check_QueryInsertObject(callback, __LINE__);
 
     IOleClientSite_Release(clientsite);
 
     count = IRichEditOle_GetObjectCount(reole);
-    todo_wine
     ok(count == 3, "got wrong object count: %ld\n", count);
   }
 
-- 
2.34.1


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic