Alex Villacís Lasso : richedit: Fix misreporting of match offset for EM_FINDTEXT and EM_FINDTEXTEX.

Alexandre Julliard julliard at winehq.org
Thu Jun 19 06:40:21 CDT 2008


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

Author: Alex Villacís Lasso <a_villacis at palosanto.com>
Date:   Wed Apr 30 21:25:20 2008 -0500

richedit: Fix misreporting of match offset for EM_FINDTEXT and EM_FINDTEXTEX.

---

 dlls/riched20/editor.c       |    2 +-
 dlls/riched20/tests/editor.c |   40 ++++++++++++++++++++++++++++++++++------
 2 files changed, 35 insertions(+), 7 deletions(-)

diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c
index 1ae0e23..f72f243 100644
--- a/dlls/riched20/editor.c
+++ b/dlls/riched20/editor.c
@@ -1366,7 +1366,7 @@ ME_FindText(ME_TextEditor *editor, DWORD flags, const CHARRANGE *chrg, const WCH
               break;
           }
 
-          nStart += para->member.para.nCharOfs + pCurItem->member.run.nCharOfs;
+          nStart += para->member.para.nCharOfs + item->member.run.nCharOfs;
           if (chrgText)
           {
             chrgText->cpMin = nStart;
diff --git a/dlls/riched20/tests/editor.c b/dlls/riched20/tests/editor.c
index 1d64580..a1d1127 100644
--- a/dlls/riched20/tests/editor.c
+++ b/dlls/riched20/tests/editor.c
@@ -141,14 +141,16 @@ static void check_EM_FINDTEXT(HWND hwnd, const char *name, struct find_s *f, int
   ft.lpstrText = f->needle;
   findloc = SendMessage(hwnd, EM_FINDTEXT, f->flags, (LPARAM) &ft);
   ok(findloc == f->expected_loc,
-     "EM_FINDTEXT(%s,%d) '%s' in range(%d,%d), flags %08x, got start at %d\n",
-     name, id, f->needle, f->start, f->end, f->flags, findloc);
+     "EM_FINDTEXT(%s,%d) '%s' in range(%d,%d), flags %08x, got start at %d, expected %d\n",
+     name, id, f->needle, f->start, f->end, f->flags, findloc, f->expected_loc);
 }
 
 static void check_EM_FINDTEXTEX(HWND hwnd, const char *name, struct find_s *f,
     int id) {
   int findloc;
   FINDTEXTEX ft;
+  int expected_end_loc;
+
   memset(&ft, 0, sizeof(ft));
   ft.chrg.cpMin = f->start;
   ft.chrg.cpMax = f->end;
@@ -160,10 +162,11 @@ static void check_EM_FINDTEXTEX(HWND hwnd, const char *name, struct find_s *f,
   ok(ft.chrgText.cpMin == f->expected_loc,
       "EM_FINDTEXTEX(%s,%d) '%s' in range(%d,%d), flags %08x, start at %d\n",
       name, id, f->needle, f->start, f->end, f->flags, ft.chrgText.cpMin);
-  ok(ft.chrgText.cpMax == ((f->expected_loc == -1) ? -1
-        : f->expected_loc + strlen(f->needle)),
-      "EM_FINDTEXTEX(%s,%d) '%s' in range(%d,%d), flags %08x, end at %d\n",
-      name, id, f->needle, f->start, f->end, f->flags, ft.chrgText.cpMax);
+  expected_end_loc = ((f->expected_loc == -1) ? -1
+        : f->expected_loc + strlen(f->needle));
+  ok(ft.chrgText.cpMax == expected_end_loc,
+      "EM_FINDTEXTEX(%s,%d) '%s' in range(%d,%d), flags %08x, end at %d, expected %d\n",
+      name, id, f->needle, f->start, f->end, f->flags, ft.chrgText.cpMax, expected_end_loc);
 }
 
 static void run_tests_EM_FINDTEXT(HWND hwnd, const char *name, struct find_s *find,
@@ -187,6 +190,7 @@ static void run_tests_EM_FINDTEXT(HWND hwnd, const char *name, struct find_s *fi
 static void test_EM_FINDTEXT(void)
 {
   HWND hwndRichEdit = new_richedit(NULL);
+  CHARFORMAT2 cf2;
 
   /* Empty rich edit control */
   run_tests_EM_FINDTEXT(hwndRichEdit, "1", find_tests,
@@ -198,6 +202,30 @@ static void test_EM_FINDTEXT(void)
   run_tests_EM_FINDTEXT(hwndRichEdit, "2", find_tests2,
       sizeof(find_tests2)/sizeof(struct find_s));
 
+  /* Setting a format on an arbitrary range should have no effect in search
+     results. This tests correct offset reporting across runs. */
+  cf2.cbSize = sizeof(CHARFORMAT2);
+  SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_DEFAULT,
+             (LPARAM) &cf2);
+  cf2.dwMask = CFM_ITALIC | cf2.dwMask;
+  cf2.dwEffects = CFE_ITALIC ^ cf2.dwEffects;
+  SendMessage(hwndRichEdit, EM_SETSEL, 6, 20);
+  SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2);
+
+  /* Haystack text, again */
+  run_tests_EM_FINDTEXT(hwndRichEdit, "2-bis", find_tests2,
+      sizeof(find_tests2)/sizeof(struct find_s));
+
+  /* Yet another range */
+  cf2.dwMask = CFM_BOLD | cf2.dwMask;
+  cf2.dwEffects = CFE_BOLD ^ cf2.dwEffects;
+  SendMessage(hwndRichEdit, EM_SETSEL, 11, 15);
+  SendMessage(hwndRichEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf2);
+
+  /* Haystack text, again */
+  run_tests_EM_FINDTEXT(hwndRichEdit, "2-bisbis", find_tests2,
+      sizeof(find_tests2)/sizeof(struct find_s));
+
   DestroyWindow(hwndRichEdit);
 }
 




More information about the wine-cvs mailing list