Huw Davies : riched20: Simplify adding the undo items when joining paragraphs.

Alexandre Julliard julliard at winehq.org
Fri Jan 25 13:31:49 CST 2013


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

Author: Huw Davies <huw at codeweavers.com>
Date:   Fri Jan 25 13:56:29 2013 +0000

riched20: Simplify adding the undo items when joining paragraphs.

---

 dlls/riched20/para.c |   79 ++++++++++++++++++++++++++-----------------------
 1 files changed, 42 insertions(+), 37 deletions(-)

diff --git a/dlls/riched20/para.c b/dlls/riched20/para.c
index ffa816d..cef364e 100644
--- a/dlls/riched20/para.c
+++ b/dlls/riched20/para.c
@@ -322,7 +322,7 @@ ME_DisplayItem *ME_SplitParagraph(ME_TextEditor *editor, ME_DisplayItem *run,
 ME_DisplayItem *ME_JoinParagraphs(ME_TextEditor *editor, ME_DisplayItem *tp,
                                   BOOL keepFirstParaFormat)
 {
-  ME_DisplayItem *pNext, *pFirstRunInNext, *pRun, *pTmp;
+  ME_DisplayItem *pNext, *pFirstRunInNext, *pRun, *pTmp, *pCell = NULL;
   int i, shift;
   ME_UndoItem *undo = NULL;
   int end_len;
@@ -353,20 +353,6 @@ ME_DisplayItem *ME_JoinParagraphs(ME_TextEditor *editor, ME_DisplayItem *tp,
   ME_PrevRun(&startCur.pPara, &startCur.pRun);
   ME_SetCharFormat(editor, &startCur, &endCur, &fmt);
 
-  undo = ME_AddUndoItem(editor, diUndoSplitParagraph, pNext);
-  if (undo)
-  {
-    undo->nStart = pNext->member.para.nCharOfs - end_len;
-    undo->eol_str = pRun->member.run.strText;
-    pRun->member.run.strText = NULL; /* Avoid freeing the string */
-  }
-  if (!keepFirstParaFormat)
-  {
-    ME_AddUndoItem(editor, diUndoSetParagraphFormat, tp);
-    *tp->member.para.pFmt = *pNext->member.para.pFmt;
-    tp->member.para.border = pNext->member.para.border;
-  }
-
   if (!editor->bEmulateVersion10) { /* v4.1 */
     /* Table cell/row properties are always moved over from the removed para. */
     tp->member.para.nFlags = pNext->member.para.nFlags;
@@ -374,35 +360,54 @@ ME_DisplayItem *ME_JoinParagraphs(ME_TextEditor *editor, ME_DisplayItem *tp,
 
     /* Remove cell boundary if it is between the end paragraph run and the next
      * paragraph display item. */
-    pTmp = pRun->next;
-    while (pTmp != pNext) {
+    for (pTmp = pRun->next; pTmp != pNext; pTmp = pTmp->next)
+    {
       if (pTmp->type == diCell)
       {
-        ME_Cell *pCell = &pTmp->member.cell;
-        if (undo)
-        {
-          assert(!(undo->di.member.para.nFlags & MEPF_ROWEND));
-          if (!(undo->di.member.para.nFlags & MEPF_ROWSTART))
-            undo->di.member.para.nFlags |= MEPF_CELL;
-          undo->di.member.para.pCell = ALLOC_OBJ(ME_DisplayItem);
-          *undo->di.member.para.pCell = *pTmp;
-          undo->di.member.para.pCell->next = NULL;
-          undo->di.member.para.pCell->prev = NULL;
-          undo->di.member.para.pCell->member.cell.next_cell = NULL;
-          undo->di.member.para.pCell->member.cell.prev_cell = NULL;
-        }
-        ME_Remove(pTmp);
-        if (pCell->prev_cell)
-          pCell->prev_cell->member.cell.next_cell = pCell->next_cell;
-        if (pCell->next_cell)
-          pCell->next_cell->member.cell.prev_cell = pCell->prev_cell;
-        ME_DestroyDisplayItem(pTmp);
+        pCell = pTmp;
         break;
       }
-      pTmp = pTmp->next;
     }
   }
 
+  undo = ME_AddUndoItem(editor, diUndoSplitParagraph, pNext);
+  if (undo)
+  {
+    undo->nStart = pNext->member.para.nCharOfs - end_len;
+    undo->eol_str = pRun->member.run.strText;
+    pRun->member.run.strText = NULL; /* Avoid freeing the string */
+
+    if (pCell)
+    {
+      assert(!(undo->di.member.para.nFlags & MEPF_ROWEND));
+      if (!(undo->di.member.para.nFlags & MEPF_ROWSTART))
+        undo->di.member.para.nFlags |= MEPF_CELL;
+      undo->di.member.para.pCell = ALLOC_OBJ(ME_DisplayItem);
+      *undo->di.member.para.pCell = *pCell;
+      undo->di.member.para.pCell->next = NULL;
+      undo->di.member.para.pCell->prev = NULL;
+      undo->di.member.para.pCell->member.cell.next_cell = NULL;
+      undo->di.member.para.pCell->member.cell.prev_cell = NULL;
+    }
+  }
+
+  if (pCell)
+  {
+    ME_Remove( pCell );
+    if (pCell->member.cell.prev_cell)
+      pCell->member.cell.prev_cell->member.cell.next_cell = pCell->member.cell.next_cell;
+    if (pCell->member.cell.next_cell)
+      pCell->member.cell.next_cell->member.cell.prev_cell = pCell->member.cell.prev_cell;
+    ME_DestroyDisplayItem( pCell );
+  }
+
+  if (!keepFirstParaFormat)
+  {
+    ME_AddUndoItem(editor, diUndoSetParagraphFormat, tp);
+    *tp->member.para.pFmt = *pNext->member.para.pFmt;
+    tp->member.para.border = pNext->member.para.border;
+  }
+
   shift = pNext->member.para.nCharOfs - tp->member.para.nCharOfs - end_len;
 
   pFirstRunInNext = ME_FindItemFwd(pNext, diRunOrParagraph);




More information about the wine-cvs mailing list