Huw Davies : riched20: Avoid an unnecessary string duplication.
Alexandre Julliard
julliard at winehq.org
Tue Jan 22 14:52:23 CST 2013
Module: wine
Branch: master
Commit: 7a27ffb28ccadb611e623bf0e7c20595a48ee7dc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7a27ffb28ccadb611e623bf0e7c20595a48ee7dc
Author: Huw Davies <huw at 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)
{
More information about the wine-cvs
mailing list