From d10256f309e2f77b7a48594e5691899586150f3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Villac=C3=ADs=20Lasso?= Date: Thu, 24 Apr 2008 10:04:23 -0500 Subject: [PATCH] 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 97fce4ae9af..04b0e802dcc 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 ac53572e77a..22dac0ae35f 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,