Module: wine Branch: master Commit: 88214a5874b4fa3f009444b65a8a424105454f51 URL: http://source.winehq.org/git/wine.git/?a=commit;h=88214a5874b4fa3f009444b65a...
Author: Jactry Zeng jactry92@gmail.com Date: Tue Jan 21 08:55:29 2014 +0800
riched20: Add UTF8 support for EM_SETTEXTEX.
---
dlls/riched20/editor.c | 16 ++++++++++++---- dlls/riched20/tests/editor.c | 8 ++++---- 2 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c index 85848bc..e419bf6 100644 --- a/dlls/riched20/editor.c +++ b/dlls/riched20/editor.c @@ -3329,8 +3329,9 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, SETTEXTEX *pStruct = (SETTEXTEX *)wParam; int from, to, len; ME_Style *style; - BOOL bRtf, bUnicode, bSelection; + BOOL bRtf, bUnicode, bSelection, bUTF8; int oldModify = editor->nModifyStep; + static const char utf8_bom[] = {0xef, 0xbb, 0xbf};
if (!pStruct) return 0;
@@ -3339,6 +3340,7 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, bRtf = (lParam && (!strncmp((char *)lParam, "{\rtf", 5) || !strncmp((char *)lParam, "{\urtf", 6))); bUnicode = !bRtf && pStruct->codepage == CP_UNICODE; + bUTF8 = (lParam && (!strncmp((char *)lParam, utf8_bom, 3)));
TRACE("EM_SETTEXTEX - %s, flags %d, cp %d\n", bUnicode ? debugstr_w((LPCWSTR)lParam) : debugstr_a((LPCSTR)lParam), @@ -3364,9 +3366,15 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, len = lParam ? strlen((char *)lParam) : 0; } } else { - wszText = ME_ToUnicode(pStruct->codepage, (void *)lParam, &len); - ME_InsertTextFromCursor(editor, 0, wszText, len, style); - ME_EndToUnicode(pStruct->codepage, wszText); + if (bUTF8 && !bUnicode) { + wszText = ME_ToUnicode(CP_UTF8, (void *)(lParam+3), &len); + ME_InsertTextFromCursor(editor, 0, wszText, len, style); + ME_EndToUnicode(CP_UTF8, wszText); + } else { + wszText = ME_ToUnicode(pStruct->codepage, (void *)lParam, &len); + ME_InsertTextFromCursor(editor, 0, wszText, len, style); + ME_EndToUnicode(pStruct->codepage, wszText); + } }
if (bSelection) { diff --git a/dlls/riched20/tests/editor.c b/dlls/riched20/tests/editor.c index ae0f72f..2efee9a 100644 --- a/dlls/riched20/tests/editor.c +++ b/dlls/riched20/tests/editor.c @@ -3901,17 +3901,17 @@ static void test_EM_SETTEXTEX(void) setText.codepage = CP_ACP; SendMessageA(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM)"\xef\xbb\xbfTestUTF8WithBOM"); result = SendMessageA(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM)bufACP); - todo_wine ok(result == 15, "EM_SETTEXTEX: Test UTF8 with BOM returned %d, expected 15\n", result); + ok(result == 15, "EM_SETTEXTEX: Test UTF8 with BOM returned %d, expected 15\n", result); result = strcmp(bufACP, "TestUTF8WithBOM"); - todo_wine ok(result == 0, "EM_SETTEXTEX: Test UTF8 with BOM set wrong text: Result: %s\n", bufACP); + ok(result == 0, "EM_SETTEXTEX: Test UTF8 with BOM set wrong text: Result: %s\n", bufACP);
setText.flags = 0; setText.codepage = CP_UTF8; SendMessageA(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM)"\xef\xbb\xbfTestUTF8WithBOM"); result = SendMessageA(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM)bufACP); - todo_wine ok(result == 15, "EM_SETTEXTEX: Test UTF8 with BOM returned %d, expected 15\n", result); + ok(result == 15, "EM_SETTEXTEX: Test UTF8 with BOM returned %d, expected 15\n", result); result = strcmp(bufACP, "TestUTF8WithBOM"); - todo_wine ok(result == 0, "EM_SETTEXTEX: Test UTF8 with BOM set wrong text: Result: %s\n", bufACP); + ok(result == 0, "EM_SETTEXTEX: Test UTF8 with BOM set wrong text: Result: %s\n", bufACP);
DestroyWindow(hwndRichEdit); }