riched20: Fix text replacement with text limit.

This commit is contained in:
Clinton Stimpson 2007-03-28 07:03:41 -06:00 committed by Alexandre Julliard
parent 6d1402cd89
commit 4152c14df4
2 changed files with 21 additions and 5 deletions

View File

@ -431,19 +431,21 @@ void ME_InsertTextFromCursor(ME_TextEditor *editor, int nCursor,
{ {
const WCHAR *pos; const WCHAR *pos;
ME_Cursor *p = NULL; ME_Cursor *p = NULL;
int freeSpace;
/* FIXME really HERE ? */
if (ME_IsSelection(editor))
ME_DeleteSelection(editor);
/* FIXME: is this too slow? */ /* FIXME: is this too slow? */
/* Didn't affect performance for WM_SETTEXT (around 50sec/30K) */ /* Didn't affect performance for WM_SETTEXT (around 50sec/30K) */
int freeSpace = editor->nTextLimit - ME_GetTextLength(editor); freeSpace = editor->nTextLimit - ME_GetTextLength(editor);
/* text operations set modified state */ /* text operations set modified state */
editor->nModifyStep = 1; editor->nModifyStep = 1;
assert(style); assert(style);
/* FIXME really HERE ? */
if (ME_IsSelection(editor))
ME_DeleteSelection(editor);
assert(nCursor>=0 && nCursor<editor->nCursors); assert(nCursor>=0 && nCursor<editor->nCursors);
if (len == -1) if (len == -1)
len = lstrlenW(str); len = lstrlenW(str);

View File

@ -1019,7 +1019,9 @@ static void test_EM_LIMITTEXT(void)
static void test_EM_EXLIMITTEXT(void) static void test_EM_EXLIMITTEXT(void)
{ {
int i, selBegin, selEnd, len1, len2; int i, selBegin, selEnd, len1, len2;
int result;
char text[1024 + 1]; char text[1024 + 1];
char buffer[1024 + 1];
int textlimit = 0; /* multiple of 100 */ int textlimit = 0; /* multiple of 100 */
HWND hwndRichEdit = new_richedit(NULL); HWND hwndRichEdit = new_richedit(NULL);
@ -1087,6 +1089,18 @@ static void test_EM_EXLIMITTEXT(void)
"EM_EXLIMITTEXT: No Change Expected\nOld Length: %d, New Length: %d, Limit: %d\n", "EM_EXLIMITTEXT: No Change Expected\nOld Length: %d, New Length: %d, Limit: %d\n",
len1,len2,i); len1,len2,i);
/* set text up to the limit, select all the text, then add a char */
textlimit = 5;
memset(text, 'W', textlimit);
text[textlimit] = 0;
SendMessage(hwndRichEdit, EM_EXLIMITTEXT, 0, textlimit);
SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text);
SendMessage(hwndRichEdit, EM_SETSEL, 0, -1);
SendMessage(hwndRichEdit, WM_CHAR, 'A', 1);
SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buffer);
result = strcmp(buffer, "A");
ok(0 == result, "got string = \"%s\"\n", buffer);
DestroyWindow(hwndRichEdit); DestroyWindow(hwndRichEdit);
} }