Module: wine Branch: master Commit: 4152c14df45819c0f2ea591d448293e61e7ab8c0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4152c14df45819c0f2ea591d44...
Author: Clinton Stimpson cjstimpson@utwire.net Date: Wed Mar 28 07:03:41 2007 -0600
riched20: Fix text replacement with text limit.
---
dlls/riched20/caret.c | 12 +++++++----- dlls/riched20/tests/editor.c | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/dlls/riched20/caret.c b/dlls/riched20/caret.c index f6e0d7f..3f9547e 100644 --- a/dlls/riched20/caret.c +++ b/dlls/riched20/caret.c @@ -431,19 +431,21 @@ void ME_InsertTextFromCursor(ME_TextEditor *editor, int nCursor, { const WCHAR *pos; ME_Cursor *p = NULL; + int freeSpace; + + /* FIXME really HERE ? */ + if (ME_IsSelection(editor)) + ME_DeleteSelection(editor); + /* FIXME: is this too slow? */ /* 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 */ editor->nModifyStep = 1;
assert(style);
- /* FIXME really HERE ? */ - if (ME_IsSelection(editor)) - ME_DeleteSelection(editor); - assert(nCursor>=0 && nCursor<editor->nCursors); if (len == -1) len = lstrlenW(str); diff --git a/dlls/riched20/tests/editor.c b/dlls/riched20/tests/editor.c index 71e82cb..4f95bfe 100644 --- a/dlls/riched20/tests/editor.c +++ b/dlls/riched20/tests/editor.c @@ -1019,7 +1019,9 @@ static void test_EM_LIMITTEXT(void) static void test_EM_EXLIMITTEXT(void) { int i, selBegin, selEnd, len1, len2; + int result; char text[1024 + 1]; + char buffer[1024 + 1]; int textlimit = 0; /* multiple of 100 */ 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", 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); }