Module: wine Branch: master Commit: 7a27ffb28ccadb611e623bf0e7c20595a48ee7dc URL: http://source.winehq.org/git/wine.git/?a=commit;h=7a27ffb28ccadb611e623bf0e7...
Author: Huw Davies huw@codeweavers.com Date: Tue Jan 22 14:04:08 2013 +0000
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 7decff2..490f39c 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 a101cc1..af27238 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) {