Module: wine Branch: master Commit: d10256f309e2f77b7a48594e5691899586150f3d URL: http://source.winehq.org/git/wine.git/?a=commit;h=d10256f309e2f77b7a48594e56...
Author: Alex Villacís Lasso a_villacis@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,