riched20: ensure text is wrapped before invalidating selection (fixes Jan 2006 regression and bug#5769)

Krzysztof Foltman wdev at
Fri Aug 4 16:40:06 CDT 2006

The fix is related to the fact, that the existing version of code did 
not ensure the text was properly wrapped before trying to invalidate the 
selection, which could (and did) result in unpredictable behavior (and 
assertion failures).

To ensure similar regressions don't go unnoticed, an assertion was added 
in ME_GetCursorCoordinates. Note that this change may reveal latent bugs 
somewhere else. But I guess that's a good thing, even if it reduces 
stability in short term.

-------------- next part --------------
diff --git a/dlls/riched20/caret.c b/dlls/riched20/caret.c
index da52288..5124822 100644
--- a/dlls/riched20/caret.c
+++ b/dlls/riched20/caret.c
@@ -118,6 +118,7 @@ ME_GetCursorCoordinates(ME_TextEditor *e
   assert(!pCursor->nOffset || !editor->bCaretAtEnd);
   assert(height && x && y);
+  assert(!(ME_GetParagraph(pCursorRun)->member.para.nFlags & MEPF_REWRAP));
   if (pCursorRun->type == diRun) {
     ME_DisplayItem *row = ME_FindItemBack(pCursorRun, diStartRowOrParagraph);
diff --git a/dlls/riched20/paint.c b/dlls/riched20/paint.c
index f3f5ac1..d1fe9db 100644
--- a/dlls/riched20/paint.c
+++ b/dlls/riched20/paint.c
@@ -493,6 +493,7 @@ ME_InvalidateFromOfs(ME_TextEditor *edit
 ME_InvalidateSelection(ME_TextEditor *editor)
+  ME_WrapMarkedParagraphs(editor);
   if (ME_IsSelection(editor) || editor->nLastSelStart != editor->nLastSelEnd)
     int x, y, height;
diff --git a/dlls/riched20/run.c b/dlls/riched20/run.c
old mode 100755
new mode 100644

More information about the wine-patches mailing list