Alex Villacís Lasso : riched20: Implement ignoring of last \par for EM_STREAMIN - 1.0 emulation.

Alexandre Julliard julliard at winehq.org
Thu Apr 24 15:56:36 CDT 2008


Module: wine
Branch: master
Commit: d10256f309e2f77b7a48594e5691899586150f3d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d10256f309e2f77b7a48594e5691899586150f3d

Author: Alex Villacís Lasso <a_villacis at palosanto.com>
Date:   Thu Apr 24 10:04:23 2008 -0500

riched20: Implement ignoring of last \par for EM_STREAMIN - 1.0 emulation.

---

 dlls/riched20/editor.c       |   11 +++++----
 dlls/riched32/tests/editor.c |   52 +++++++++++++++++++++++++++++++++++++----
 2 files changed, 53 insertions(+), 10 deletions(-)

diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c
index 97fce4a..04b0e80 100644
--- a/dlls/riched20/editor.c
+++ b/dlls/riched20/editor.c
@@ -1105,12 +1105,13 @@ static LRESULT ME_StreamIn(ME_TextEditor *editor, DWORD format, EDITSTREAM *stre
       if (stripLastCR) {
         int newfrom, newto;
         ME_GetSelection(editor, &newfrom, &newto);
-        if (newto > to) {
-          WCHAR lastchar = '\0';
+        if (newto > to + (editor->bEmulateVersion10 ? 1 : 0)) {
+          WCHAR lastchar[3] = {'\0', '\0'};
+          int linebreakSize = editor->bEmulateVersion10 ? 2 : 1;
 
-          ME_GetTextW(editor, &lastchar, newto - 1, 1, 0);
-          if (lastchar == '\r') {
-            ME_InternalDeleteText(editor, newto - 1, 1);
+          ME_GetTextW(editor, lastchar, newto - linebreakSize, linebreakSize, 0);
+          if (lastchar[0] == '\r' && (lastchar[1] == '\n' || lastchar[1] == '\0')) {
+            ME_InternalDeleteText(editor, newto - linebreakSize, linebreakSize);
           }
         }
       }
diff --git a/dlls/riched32/tests/editor.c b/dlls/riched32/tests/editor.c
index ac53572..22dac0a 100644
--- a/dlls/riched32/tests/editor.c
+++ b/dlls/riched32/tests/editor.c
@@ -179,6 +179,10 @@ static void test_EM_STREAMIN(void)
   EDITSTREAM es;
   char buffer[1024] = {0};
 
+  const char * streamText0 = "{\\rtf1 TestSomeText}";
+  const char * streamText0a = "{\\rtf1 TestSomeText\\par}";
+  const char * streamText0b = "{\\rtf1 TestSomeText\\par\\par}";
+
   const char * streamText1 =
   "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang12298{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 System;}}\r\n" \
   "\\viewkind4\\uc1\\pard\\f0\\fs17 TestSomeText\\par\r\n" \
@@ -196,6 +200,48 @@ static void test_EM_STREAMIN(void)
 
   const char * streamText3 = "RichEdit1";
 
+  /* Minimal test without \par at the end */
+  es.dwCookie = (DWORD_PTR)&streamText0;
+  es.dwError = 0;
+  es.pfnCallback = test_EM_STREAMIN_esCallback;
+  SendMessage(hwndRichEdit, EM_STREAMIN,
+              (WPARAM)(SF_RTF), (LPARAM)&es);
+
+  result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer);
+  ok (result  == 12,
+      "EM_STREAMIN: Test 0 returned %ld, expected 12\n", result);
+  result = strcmp (buffer,"TestSomeText");
+  ok (result  == 0,
+      "EM_STREAMIN: Test 0 set wrong text: Result: %s\n",buffer);
+
+  /* Native richedit 2.0 ignores last \par */
+  es.dwCookie = (DWORD_PTR)&streamText0a;
+  es.dwError = 0;
+  es.pfnCallback = test_EM_STREAMIN_esCallback;
+  SendMessage(hwndRichEdit, EM_STREAMIN,
+              (WPARAM)(SF_RTF), (LPARAM)&es);
+
+  result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer);
+  ok (result  == 12,
+      "EM_STREAMIN: Test 0-a returned %ld, expected 12\n", result);
+  result = strcmp (buffer,"TestSomeText");
+  ok (result  == 0,
+      "EM_STREAMIN: Test 0-a set wrong text: Result: %s\n",buffer);
+
+  /* Native richedit 2.0 ignores last \par, next-to-last \par appears */
+  es.dwCookie = (DWORD_PTR)&streamText0b;
+  es.dwError = 0;
+  es.pfnCallback = test_EM_STREAMIN_esCallback;
+  SendMessage(hwndRichEdit, EM_STREAMIN,
+              (WPARAM)(SF_RTF), (LPARAM)&es);
+
+  result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer);
+  ok (result  == 14,
+      "EM_STREAMIN: Test 0-b returned %ld, expected 14\n", result);
+  result = strcmp (buffer,"TestSomeText\r\n");
+  ok (result  == 0,
+      "EM_STREAMIN: Test 0-b set wrong text: Result: %s\n",buffer);
+
   es.dwCookie = (DWORD_PTR)&streamText1;
   es.dwError = 0;
   es.pfnCallback = test_EM_STREAMIN_esCallback;
@@ -203,15 +249,11 @@ static void test_EM_STREAMIN(void)
               (WPARAM)(SF_RTF), (LPARAM)&es);
 
   result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer);
-  todo_wine {
   ok (result  == 12,
       "EM_STREAMIN: Test 1 returned %ld, expected 12\n", result);
-  }
   result = strcmp (buffer,"TestSomeText");
-  todo_wine {
   ok (result  == 0,
       "EM_STREAMIN: Test 1 set wrong text: Result: %s\n",buffer);
-  }
 
 
   es.dwCookie = (DWORD_PTR)&streamText2;
@@ -236,7 +278,7 @@ static void test_EM_STREAMIN(void)
   result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer);
   todo_wine {
   ok (result  == 0,
-      "EM_STREAMIN: Test 3 returned %ld, expected 9\n", result);
+      "EM_STREAMIN: Test 3 returned %ld, expected 0\n", result);
   }
   todo_wine {
   ok (strlen(buffer)  == 0,




More information about the wine-cvs mailing list