David Hedberg : richedit: GTL_PRECISE to GETTEXTLENGTHEX implies GTL_NUMBYTES.
Alexandre Julliard
julliard at winehq.org
Mon Mar 1 09:27:34 CST 2010
Module: wine
Branch: master
Commit: 534398a57ea0920efc109a8c963ef1723fe2a79f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=534398a57ea0920efc109a8c963ef1723fe2a79f
Author: David Hedberg <david.hedberg at gmail.com>
Date: Sat Feb 27 17:58:16 2010 +0100
richedit: GTL_PRECISE to GETTEXTLENGTHEX implies GTL_NUMBYTES.
If GTL_PRECISE is passed without specifying either GTL_NUMCHARS or
GTL_NUMBYTES, behave as if GTL_NUMBYTES was passed.
---
dlls/riched20/caret.c | 6 ++++--
dlls/riched20/tests/editor.c | 39 +++++++++++++++++++++++++++++++++++++++
2 files changed, 43 insertions(+), 2 deletions(-)
diff --git a/dlls/riched20/caret.c b/dlls/riched20/caret.c
index abcc73e..a72a42b 100644
--- a/dlls/riched20/caret.c
+++ b/dlls/riched20/caret.c
@@ -91,8 +91,10 @@ int ME_GetTextLengthEx(ME_TextEditor *editor, const GETTEXTLENGTHEX *how)
&& (how->flags & GTL_USECRLF)
&& !editor->bEmulateVersion10) /* Ignore GTL_USECRLF flag in 1.0 emulation */
length += editor->nParagraphs - 1;
-
- if (how->flags & GTL_NUMBYTES)
+
+ if (how->flags & GTL_NUMBYTES ||
+ (how->flags & GTL_PRECISE && /* GTL_PRECISE seems to imply GTL_NUMBYTES */
+ !(how->flags & GTL_NUMCHARS))) /* unless GTL_NUMCHARS is given */
{
CPINFO cpinfo;
diff --git a/dlls/riched20/tests/editor.c b/dlls/riched20/tests/editor.c
index 1fbdaa5..ee26683 100644
--- a/dlls/riched20/tests/editor.c
+++ b/dlls/riched20/tests/editor.c
@@ -5540,6 +5540,45 @@ static void test_EM_GETTEXTLENGTHEX(void)
ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0);
ok(ret == 6, "ret %d\n",ret);
+ /* Unicode/NUMCHARS/NUMBYTES */
+ SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) test_string_2);
+
+ gtl.flags = GTL_DEFAULT;
+ gtl.codepage = 1200;
+ ret = SendMessage(hwnd, EM_GETTEXTLENGTHEX, (WPARAM) >l, 0);
+ ok(ret == lstrlen(test_string_2),
+ "GTL_DEFAULT gave %i, expected %i\n", ret, lstrlen(test_string_2));
+
+ gtl.flags = GTL_NUMCHARS;
+ gtl.codepage = 1200;
+ ret = SendMessage(hwnd, EM_GETTEXTLENGTHEX, (WPARAM) >l, 0);
+ ok(ret == lstrlen(test_string_2),
+ "GTL_NUMCHARS gave %i, expected %i\n", ret, lstrlen(test_string_2));
+
+ gtl.flags = GTL_NUMBYTES;
+ gtl.codepage = 1200;
+ ret = SendMessage(hwnd, EM_GETTEXTLENGTHEX, (WPARAM) >l, 0);
+ ok(ret == lstrlen(test_string_2)*2,
+ "GTL_NUMBYTES gave %i, expected %i\n", ret, lstrlen(test_string_2)*2);
+
+ gtl.flags = GTL_PRECISE;
+ gtl.codepage = 1200;
+ ret = SendMessage(hwnd, EM_GETTEXTLENGTHEX, (WPARAM) >l, 0);
+ ok(ret == lstrlen(test_string_2)*2,
+ "GTL_PRECISE gave %i, expected %i\n", ret, lstrlen(test_string_2)*2);
+
+ gtl.flags = GTL_NUMCHARS | GTL_PRECISE;
+ gtl.codepage = 1200;
+ ret = SendMessage(hwnd, EM_GETTEXTLENGTHEX, (WPARAM) >l, 0);
+ ok(ret == lstrlen(test_string_2),
+ "GTL_NUMCHAR | GTL_PRECISE gave %i, expected %i\n", ret, lstrlen(test_string_2));
+
+ gtl.flags = GTL_NUMCHARS | GTL_NUMBYTES;
+ gtl.codepage = 1200;
+ ret = SendMessage(hwnd, EM_GETTEXTLENGTHEX, (WPARAM) >l, 0);
+ ok(ret == E_INVALIDARG,
+ "GTL_NUMCHARS | GTL_NUMBYTES gave %i, expected %i\n", ret, E_INVALIDARG);
+
DestroyWindow(hwnd);
}
More information about the wine-cvs
mailing list