Module: wine Branch: master Commit: 2429e8b10b12d624aa58a2432f746d2c61ddfc31 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2429e8b10b12d624aa58a2432f...
Author: Huw Davies huw@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);