From 7a27ffb28ccadb611e623bf0e7c20595a48ee7dc Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Tue, 22 Jan 2013 14:04:08 +0000 Subject: [PATCH] riched20: Avoid an unnecessary string duplication. --- dlls/riched20/caret.c | 25 ++++++++----------------- dlls/riched20/undo.c | 2 +- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/dlls/riched20/caret.c b/dlls/riched20/caret.c index 7decff2025f..490f39c2171 100644 --- a/dlls/riched20/caret.c +++ b/dlls/riched20/caret.c @@ -361,6 +361,7 @@ BOOL ME_InternalDeleteText(ME_TextEditor *editor, ME_Cursor *start, else { ME_Cursor cursor; + ME_UndoItem *undo; int nCharsToDelete = min(nChars, c.nOffset); int i; @@ -378,25 +379,15 @@ BOOL ME_InternalDeleteText(ME_TextEditor *editor, ME_Cursor *start, nCharsToDelete, nChars, c.nOffset, debugstr_w(run->strText->szData), run->strText->nLen); - if (!c.nOffset && run->strText->nLen == nCharsToDelete) + undo = ME_AddUndoItem(editor, diUndoInsertRun, c.pRun); + if (undo) { - /* undo = reinsert whole run */ - /* nOfs is a character offset (from the start of the document - to the current (deleted) run */ - ME_UndoItem *pUndo = ME_AddUndoItem(editor, diUndoInsertRun, c.pRun); - if (pUndo) - pUndo->di.member.run.nCharOfs = nOfs+nChars; - } - else - { - /* undo = reinsert partial run */ - ME_UndoItem *pUndo = ME_AddUndoItem(editor, diUndoInsertRun, c.pRun); - if (pUndo) { - ME_DestroyString(pUndo->di.member.run.strText); - pUndo->di.member.run.nCharOfs = nOfs+nChars; - pUndo->di.member.run.strText = ME_MakeStringN(run->strText->szData+c.nOffset, nCharsToDelete); - } + /* nOfs is a character offset (from the start of the document + to the current (deleted) run */ + undo->di.member.run.nCharOfs = nOfs + nChars; + undo->di.member.run.strText = ME_MakeStringN(run->strText->szData + c.nOffset, nCharsToDelete); } + TRACE("Post deletion string: %s (%d)\n", debugstr_w(run->strText->szData), run->strText->nLen); TRACE("Shift value: %d\n", shift); ME_StrDeleteV(run->strText, c.nOffset, nCharsToDelete); diff --git a/dlls/riched20/undo.c b/dlls/riched20/undo.c index a101cc178c6..af272382151 100644 --- a/dlls/riched20/undo.c +++ b/dlls/riched20/undo.c @@ -73,7 +73,7 @@ ME_UndoItem *ME_AddUndoItem(ME_TextEditor *editor, ME_DIType type, const ME_Disp case diUndoInsertRun: assert(pdi); pItem->member.run = pdi->member.run; - pItem->member.run.strText = ME_StrDup(pItem->member.run.strText); + pItem->member.run.strText = NULL; ME_AddRefStyle(pItem->member.run.style); if (pdi->member.run.ole_obj) {