Huw Davies : riched20: Don' t split a run if the cursor is at the end of it.
Alexandre Julliard
julliard at winehq.org
Tue Jan 7 13:21:18 CST 2014
Module: wine
Branch: master
Commit: 2429e8b10b12d624aa58a2432f746d2c61ddfc31
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2429e8b10b12d624aa58a2432f746d2c61ddfc31
Author: Huw Davies <huw at codeweavers.com>
Date: Tue Jan 7 12:44:21 2014 +0000
riched20: Don't split a run if the cursor is at the end of it.
---
dlls/riched20/run.c | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/dlls/riched20/run.c b/dlls/riched20/run.c
index 245a031..176f7c9 100644
--- a/dlls/riched20/run.c
+++ b/dlls/riched20/run.c
@@ -658,17 +658,20 @@ void ME_SetSelectionCharFormat(ME_TextEditor *editor, CHARFORMAT2W *pFmt)
*/
void ME_SetCharFormat(ME_TextEditor *editor, ME_Cursor *start, ME_Cursor *end, CHARFORMAT2W *pFmt)
{
- ME_DisplayItem *run, *end_run = NULL;
+ ME_DisplayItem *run, *start_run = start->pRun, *end_run = NULL;
if (end && start->pRun == end->pRun && start->nOffset == end->nOffset)
return;
- if (start->nOffset)
+ if (start->nOffset == start->pRun->member.run.len)
+ start_run = ME_FindItemFwd( start->pRun, diRun );
+ else if (start->nOffset)
{
/* SplitRunSimple may or may not update the cursors, depending on whether they
* are selection cursors, but we need to make sure they are valid. */
int split_offset = start->nOffset;
ME_DisplayItem *split_run = ME_SplitRunSimple(editor, start);
+ start_run = start->pRun;
if (end && end->pRun == split_run)
{
end->pRun = start->pRun;
@@ -676,11 +679,18 @@ void ME_SetCharFormat(ME_TextEditor *editor, ME_Cursor *start, ME_Cursor *end, C
}
}
- if (end && end->nOffset)
- ME_SplitRunSimple(editor, end);
- end_run = end ? end->pRun : NULL;
+ if (end)
+ {
+ if (end->nOffset == end->pRun->member.run.len)
+ end_run = ME_FindItemFwd( end->pRun, diRun );
+ else
+ {
+ if (end->nOffset) ME_SplitRunSimple(editor, end);
+ end_run = end->pRun;
+ }
+ }
- for (run = start->pRun; run != end_run; run = ME_FindItemFwd( run, diRun ))
+ for (run = start_run; run != end_run; run = ME_FindItemFwd( run, diRun ))
{
ME_Style *new_style = ME_ApplyStyle(run->member.run.style, pFmt);
More information about the wine-cvs
mailing list