Clinton Stimpson : riched20: Fix text replacement with text limit.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Mar 29 14:43:33 CDT 2007


Module: wine
Branch: master
Commit: 4152c14df45819c0f2ea591d448293e61e7ab8c0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4152c14df45819c0f2ea591d448293e61e7ab8c0

Author: Clinton Stimpson <cjstimpson at 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);
 }
 




More information about the wine-cvs mailing list