[PATCH v2 3/5] riched20: Allow to return text with OLE object mark.

Jactry Zeng jzeng at codeweavers.com
Tue May 25 02:06:01 CDT 2021


Signed-off-by: Jactry Zeng <jzeng at codeweavers.com>
---
 dlls/riched20/caret.c         |  4 ++--
 dlls/riched20/editor.c        |  7 ++++++-
 dlls/riched20/tests/richole.c | 20 ++++++++++----------
 dlls/riched20/tests/txtsrv.c  |  2 +-
 4 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/dlls/riched20/caret.c b/dlls/riched20/caret.c
index 3104178082a..bd7f5dc0149 100644
--- a/dlls/riched20/caret.c
+++ b/dlls/riched20/caret.c
@@ -458,7 +458,7 @@ static struct re_object* create_re_object(const REOBJECT *reo)
 void ME_InsertOLEFromCursor(ME_TextEditor *editor, const REOBJECT* reo, int nCursor)
 {
   ME_Run *run, *prev;
-  const WCHAR space = ' ';
+  const WCHAR ole_object_mark = 0xfffc;
   struct re_object *reobj_prev = NULL;
   ME_Cursor *cursor, cursor_from_ofs;
   ME_Style *style;
@@ -475,7 +475,7 @@ void ME_InsertOLEFromCursor(ME_TextEditor *editor, const REOBJECT* reo, int nCur
   if (ME_IsSelection(editor))
     ME_DeleteSelection(editor);
 
-  run = run_insert( editor, cursor, style, &space, 1, MERF_GRAPHICS );
+  run = run_insert( editor, cursor, style, &ole_object_mark, 1, MERF_GRAPHICS );
 
   run->reobj = create_re_object( reo );
 
diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c
index 87f4c7a4e32..960d1401082 100644
--- a/dlls/riched20/editor.c
+++ b/dlls/riched20/editor.c
@@ -2132,7 +2132,7 @@ static int get_text_range( ME_TextEditor *editor, WCHAR *buffer,
                            const ME_Cursor *start, int len )
 {
     if (!buffer) return 0;
-    return ME_GetTextW( editor, buffer, INT_MAX, start, len, MEGT_DEFAULT );
+    return ME_GetTextW( editor, buffer, INT_MAX, start, len, MEGT_NOOLEOBJ );
 }
 
 int set_selection( ME_TextEditor *editor, int to, int from )
@@ -4273,6 +4273,11 @@ int ME_GetTextW(ME_TextEditor *editor, WCHAR *buffer, int buflen,
       nLen = 2;
       str = L"\r\n";
     }
+    else if (flags & MEGT_NOOLEOBJ && run->nFlags & MERF_GRAPHICS)
+    {
+      srcChars--;
+      str = L" ";
+    }
     else
     {
       nLen = min(nLen, srcChars);
diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c
index a50a4aff26b..702190c8259 100644
--- a/dlls/riched20/tests/richole.c
+++ b/dlls/riched20/tests/richole.c
@@ -3395,13 +3395,13 @@ static void test_InsertObject(void)
   gettextex.lpUsedDefChar = NULL;
   result = SendMessageW(hwnd, EM_GETTEXTEX, (WPARAM)&gettextex, (LPARAM)buffer);
   ok(result == lstrlenW(expected_string), "Got wrong length: %d.\n", result);
-  todo_wine ok(!lstrcmpW(buffer, expected_string), "Got wrong content: %s.\n", debugstr_w(buffer));
+  ok(!lstrcmpW(buffer, expected_string), "Got wrong content: %s.\n", debugstr_w(buffer));
 
   gettextex.flags = GT_RAWTEXT;
   memset(buffer, 0, sizeof(buffer));
   result = SendMessageW(hwnd, EM_GETTEXTEX, (WPARAM)&gettextex, (LPARAM)buffer);
   ok(result == lstrlenW(expected_string), "Got wrong length: %d.\n", result);
-  todo_wine ok(!lstrcmpW(buffer, expected_string), "Got wrong content: %s.\n", debugstr_w(buffer));
+  ok(!lstrcmpW(buffer, expected_string), "Got wrong content: %s.\n", debugstr_w(buffer));
 
   expected_stringA = "abc d efg";
   memset(bufferA, 0, sizeof(bufferA));
@@ -3424,26 +3424,26 @@ static void test_InsertObject(void)
   hr = ITextRange_GetText(range, &bstr);
   ok(hr == S_OK, "Got hr %#x.\n", hr);
   ok(lstrlenW(bstr) == lstrlenW(expected_string), "Got wrong length: %d.\n", lstrlenW(bstr));
-  todo_wine ok(!lstrcmpW(bstr, expected_string), "Got text: %s.\n", wine_dbgstr_w(bstr));
+  ok(!lstrcmpW(bstr, expected_string), "Got text: %s.\n", wine_dbgstr_w(bstr));
   SysFreeString(bstr);
   hr = ITextRange_SetRange(range, 3, 4);
   ok(hr == S_OK, "Got hr %#x.\n", hr);
   hr = ITextRange_GetChar(range, &result);
   ok(hr == S_OK, "Got hr %#x.\n", hr);
-  todo_wine ok(result == 0xfffc, "Got char: %c\n", result);
+  ok(result == 0xfffc, "Got char: %c\n", result);
   ITextRange_Release(range);
 
   SendMessageW(hwnd, EM_SETSEL, 0, -1);
   hr = ITextSelection_GetText(selection, &bstr);
   ok(hr == S_OK, "Got hr %#x.\n", hr);
   ok(lstrlenW(bstr) == lstrlenW(expected_string), "Got wrong length: %d.\n", lstrlenW(bstr));
-  todo_wine ok(!lstrcmpW(bstr, expected_string), "Got text: %s.\n", wine_dbgstr_w(bstr));
+  ok(!lstrcmpW(bstr, expected_string), "Got text: %s.\n", wine_dbgstr_w(bstr));
   SysFreeString(bstr);
   SendMessageW(hwnd, EM_SETSEL, 3, 4);
   result = 0;
   hr = ITextSelection_GetChar(selection, &result);
   ok(hr == S_OK, "Got hr %#x.\n", hr);
-  todo_wine ok(result == 0xfffc, "Got char: %c\n", result);
+  ok(result == 0xfffc, "Got char: %c\n", result);
 
   SendMessageA(hwnd, WM_SETTEXT, 0, (LPARAM)"");
   result = SendMessageW(hwnd, EM_SETTEXTMODE, (WPARAM)TM_PLAINTEXT, 0);
@@ -3476,13 +3476,13 @@ static void test_InsertObject(void)
   gettextex.lpUsedDefChar = NULL;
   result = SendMessageW(hwnd, EM_GETTEXTEX, (WPARAM)&gettextex, (LPARAM)buffer);
   ok(result == lstrlenW(expected_string), "Got wrong length: %d.\n", result);
-  todo_wine ok(!lstrcmpW(buffer, expected_string), "Got wrong content: %s.\n", debugstr_w(buffer));
+  ok(!lstrcmpW(buffer, expected_string), "Got wrong content: %s.\n", debugstr_w(buffer));
 
   gettextex.flags = GT_RAWTEXT;
   memset(buffer, 0, sizeof(buffer));
   result = SendMessageW(hwnd, EM_GETTEXTEX, (WPARAM)&gettextex, (LPARAM)buffer);
   ok(result == lstrlenW(expected_string), "Got wrong length: %d.\n", result);
-  todo_wine ok(!lstrcmpW(buffer, expected_string), "Got wrong content: %s.\n", debugstr_w(buffer));
+  ok(!lstrcmpW(buffer, expected_string), "Got wrong content: %s.\n", debugstr_w(buffer));
 
   expected_stringA = "abc d efg";
   memset(bufferA, 0, sizeof(bufferA));
@@ -3511,7 +3511,7 @@ static void test_InsertObject(void)
   ok(hr == S_OK, "Got hr %#x.\n", hr);
   hr = ITextRange_GetChar(range, &result);
   ok(hr == S_OK, "Got hr %#x.\n", hr);
-  todo_wine ok(result == 0xfffc, "Got char: %c\n", result);
+  ok(result == 0xfffc, "Got char: %c\n", result);
   ITextRange_Release(range);
 
   SendMessageW(hwnd, EM_SETSEL, 0, -1);
@@ -3524,7 +3524,7 @@ static void test_InsertObject(void)
   result = 0;
   hr = ITextSelection_GetChar(selection, &result);
   ok(hr == S_OK, "Got hr %#x.\n", hr);
-  todo_wine ok(result == 0xfffc, "Got char: %c\n", result);
+  ok(result == 0xfffc, "Got char: %c\n", result);
 
   release_interfaces(&hwnd, &reole, &doc, &selection);
 }
diff --git a/dlls/riched20/tests/txtsrv.c b/dlls/riched20/tests/txtsrv.c
index 1f789da8a37..0f6fc44cee6 100644
--- a/dlls/riched20/tests/txtsrv.c
+++ b/dlls/riched20/tests/txtsrv.c
@@ -698,7 +698,7 @@ static void test_TxGetText(void)
     hres = ITextServices_TxGetText(txtserv, &rettext);
     ok(hres == S_OK, "Got hres: %#x.\n", hres);
     ok(lstrlenW(rettext) == lstrlenW(expected_string), "Got wrong length: %d.\n", lstrlenW(rettext));
-    todo_wine ok(!lstrcmpW(rettext, expected_string), "Got wrong content: %s.\n", debugstr_w(rettext));
+    ok(!lstrcmpW(rettext, expected_string), "Got wrong content: %s.\n", debugstr_w(rettext));
     SysFreeString(rettext);
     IOleClientSite_Release(clientsite);
     IRichEditOle_Release(reole);
-- 
2.30.2




More information about the wine-devel mailing list