Alex Villacís Lasso : riched20: Fix behavior of EM_REPLACESEL with painting disabled.

Alexandre Julliard julliard at winehq.org
Tue Apr 22 06:47:04 CDT 2008


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

Author: Alex Villacís Lasso <a_villacis at palosanto.com>
Date:   Mon Apr 21 10:02:52 2008 -0500

riched20: Fix behavior of EM_REPLACESEL with painting disabled.

---

 dlls/riched20/paint.c        |    4 ++-
 dlls/riched20/tests/editor.c |   52 ++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 53 insertions(+), 3 deletions(-)

diff --git a/dlls/riched20/paint.c b/dlls/riched20/paint.c
index 625f7dd..e6ec8ce 100644
--- a/dlls/riched20/paint.c
+++ b/dlls/riched20/paint.c
@@ -109,9 +109,11 @@ void ME_UpdateRepaint(ME_TextEditor *editor)
 {
   /* Should be called whenever the contents of the control have changed */
   ME_Cursor *pCursor;
+  BOOL wrappedParagraphs;
 
+  wrappedParagraphs = ME_WrapMarkedParagraphs(editor);
   if (!editor->bRedraw) return;
-  if (ME_WrapMarkedParagraphs(editor))
+  if (wrappedParagraphs)
     ME_UpdateScrollBar(editor);
   
   /* Ensure that the cursor is visible */
diff --git a/dlls/riched20/tests/editor.c b/dlls/riched20/tests/editor.c
index f8a3d6a..b97e458 100644
--- a/dlls/riched20/tests/editor.c
+++ b/dlls/riched20/tests/editor.c
@@ -1793,7 +1793,7 @@ static void test_EM_EXSETSEL(void)
     DestroyWindow(hwndRichEdit);
 }
 
-static void test_EM_REPLACESEL(void)
+static void test_EM_REPLACESEL(int redraw)
 {
     HWND hwndRichEdit = new_richedit(NULL);
     char buffer[1024] = {0};
@@ -1818,6 +1818,9 @@ static void test_EM_REPLACESEL(void)
 
     hwndRichEdit = new_richedit(NULL);
 
+    trace("Testing EM_REPLACESEL behavior with redraw=%d\n", redraw);
+    SendMessage(hwndRichEdit, WM_SETREDRAW, redraw, 0);
+
     /* Test behavior with carriage returns and newlines */
     SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL);
     r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "RichEdit1");
@@ -1834,6 +1837,10 @@ static void test_EM_REPLACESEL(void)
     ok(strcmp(buffer, "RichEdit1") == 0,
       "EM_GETTEXTEX results not what was set by EM_REPLACESEL\n");
 
+    /* Test number of lines reported after EM_REPLACESEL */
+    r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0);
+    ok(r == 1, "EM_GETLINECOUNT returned %d, expected 1\n", r);
+
     SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL);
     r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "RichEdit1\r");
     ok(10 == r, "EM_REPLACESEL returned %d, expected 10\n", r);
@@ -1849,6 +1856,10 @@ static void test_EM_REPLACESEL(void)
     ok(strcmp(buffer, "RichEdit1\r") == 0,
       "EM_GETTEXTEX returned incorrect string\n");
 
+    /* Test number of lines reported after EM_REPLACESEL */
+    r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0);
+    ok(r == 2, "EM_GETLINECOUNT returned %d, expected 2\n", r);
+
     /* Win98's riched20 and WinXP's riched20 disagree on what to return from
        EM_REPLACESEL. The general rule seems to be that Win98's riched20
        returns the number of characters *inserted* into the control (after
@@ -1861,6 +1872,10 @@ static void test_EM_REPLACESEL(void)
     ok(11 == r /* WinXP */ || 10 == r /* Win98 */,
         "EM_REPLACESEL returned %d, expected 11 or 10\n", r);
 
+    /* Test number of lines reported after EM_REPLACESEL */
+    r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0);
+    ok(r == 2, "EM_GETLINECOUNT returned %d, expected 2\n", r);
+
     r = SendMessage(hwndRichEdit, EM_EXGETSEL, 0, (LPARAM)&cr);
     ok(0 == r, "EM_EXGETSEL returned %d, expected 0\n", r);
     ok(cr.cpMin == 10, "EM_EXGETSEL returned cpMin=%d, expected 10\n", cr.cpMin);
@@ -1907,6 +1922,10 @@ static void test_EM_REPLACESEL(void)
     ok(strcmp(buffer, "\r\r") == 0,
       "EM_GETTEXTEX returned incorrect string\n");
 
+    /* Test number of lines reported after EM_REPLACESEL */
+    r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0);
+    ok(r == 3, "EM_GETLINECOUNT returned %d, expected 3\n", r);
+
     SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL);
     r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "\r\r\n");
     ok(3 == r /* WinXP */ || 1 == r /* Win98 */,
@@ -1926,6 +1945,10 @@ static void test_EM_REPLACESEL(void)
     ok(strcmp(buffer, " ") == 0,
       "EM_GETTEXTEX returned incorrect string\n");
 
+    /* Test number of lines reported after EM_REPLACESEL */
+    r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0);
+    ok(r == 1, "EM_GETLINECOUNT returned %d, expected 1\n", r);
+
     SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL);
     r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "\r\r\r\r\r\n\r\r\r");
     ok(9 == r /* WinXP */ || 7 == r /* Win98 */,
@@ -1945,6 +1968,10 @@ static void test_EM_REPLACESEL(void)
     ok(strcmp(buffer, "\r\r\r \r\r\r") == 0,
       "EM_GETTEXTEX returned incorrect string\n");
 
+    /* Test number of lines reported after EM_REPLACESEL */
+    r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0);
+    ok(r == 7, "EM_GETLINECOUNT returned %d, expected 7\n", r);
+
     SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL);
     r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "\r\r\n\r\n");
     ok(5 == r /* WinXP */ || 2 == r /* Win98 */,
@@ -1964,6 +1991,10 @@ static void test_EM_REPLACESEL(void)
     ok(strcmp(buffer, " \r") == 0,
       "EM_GETTEXTEX returned incorrect string\n");
 
+    /* Test number of lines reported after EM_REPLACESEL */
+    r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0);
+    ok(r == 2, "EM_GETLINECOUNT returned %d, expected 2\n", r);
+
     SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL);
     r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "\r\r\n\r\r");
     ok(5 == r /* WinXP */ || 3 == r /* Win98 */,
@@ -1983,6 +2014,10 @@ static void test_EM_REPLACESEL(void)
     ok(strcmp(buffer, " \r\r") == 0,
       "EM_GETTEXTEX returned incorrect string\n");
 
+    /* Test number of lines reported after EM_REPLACESEL */
+    r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0);
+    ok(r == 3, "EM_GETLINECOUNT returned %d, expected 3\n", r);
+
     SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL);
     r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "\rX\r\n\r\r");
     ok(6 == r /* WinXP */ || 5 == r /* Win98 */,
@@ -2002,6 +2037,10 @@ static void test_EM_REPLACESEL(void)
     ok(strcmp(buffer, "\rX\r\r\r") == 0,
       "EM_GETTEXTEX returned incorrect string\n");
 
+    /* Test number of lines reported after EM_REPLACESEL */
+    r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0);
+    ok(r == 5, "EM_GETLINECOUNT returned %d, expected 5\n", r);
+
     SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL);
     r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "\n\n");
     ok(2 == r, "EM_REPLACESEL returned %d, expected 2\n", r);
@@ -2020,6 +2059,10 @@ static void test_EM_REPLACESEL(void)
     ok(strcmp(buffer, "\r\r") == 0,
       "EM_GETTEXTEX returned incorrect string\n");
 
+    /* Test number of lines reported after EM_REPLACESEL */
+    r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0);
+    ok(r == 3, "EM_GETLINECOUNT returned %d, expected 3\n", r);
+
     SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)NULL);
     r = SendMessage(hwndRichEdit, EM_REPLACESEL, 0, (LPARAM) "\n\n\n\n\r\r\r\r\n");
     ok(9 == r /* WinXP */ || 7 == r /* Win98 */,
@@ -2039,6 +2082,10 @@ static void test_EM_REPLACESEL(void)
     ok(strcmp(buffer, "\r\r\r\r\r\r ") == 0,
       "EM_GETTEXTEX returned incorrect string\n");
 
+    /* Test number of lines reported after EM_REPLACESEL */
+    r = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0);
+    ok(r == 7, "EM_GETLINECOUNT returned %d, expected 7\n", r);
+
     DestroyWindow(hwndRichEdit);
 }
 
@@ -2721,7 +2768,8 @@ START_TEST( editor )
   test_EM_FORMATRANGE();
   test_unicode_conversions();
   test_EM_GETTEXTLENGTHEX();
-  test_EM_REPLACESEL();
+  test_EM_REPLACESEL(1);
+  test_EM_REPLACESEL(0);
   test_eventMask();
 
   /* Set the environment variable WINETEST_RICHED20 to keep windows




More information about the wine-cvs mailing list