The DataChange constructor must no longer make any changes to the buffer.
DataChange::Apply() will now remember the string instead, so that undo/redo will work correctly even if the underlying data has changed in the mean time. DataEditor::AddChange() will now apply the change as well. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6103 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -54,13 +54,7 @@ ReplaceChange::ReplaceChange(off_t bufferOffset, uint8 *buffer,
|
|||||||
fNewData = (uint8 *)malloc(size);
|
fNewData = (uint8 *)malloc(size);
|
||||||
fOldData = (uint8 *)malloc(size);
|
fOldData = (uint8 *)malloc(size);
|
||||||
if (fNewData != NULL && fOldData != NULL) {
|
if (fNewData != NULL && fOldData != NULL) {
|
||||||
// Save old data, and replace the data in the supplied buffer.
|
|
||||||
// Note, the buffer must be large enough to hold the changes
|
|
||||||
// at this point!
|
|
||||||
memcpy(fNewData, data, size);
|
memcpy(fNewData, data, size);
|
||||||
memcpy(fOldData, buffer + offset - bufferOffset, size);
|
|
||||||
memcpy(buffer + offset - bufferOffset, fNewData, size);
|
|
||||||
|
|
||||||
fSize = size;
|
fSize = size;
|
||||||
} else
|
} else
|
||||||
fSize = 0;
|
fSize = 0;
|
||||||
@@ -110,7 +104,8 @@ ReplaceChange::Apply(off_t bufferOffset, uint8 *buffer, size_t bufferSize)
|
|||||||
if (size == 0)
|
if (size == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// now we can safely change the buffer!
|
// now we can safely exchange the buffer!
|
||||||
|
memcpy(fOldData + dataOffset, buffer + offset - bufferOffset, size);
|
||||||
memcpy(buffer + offset - bufferOffset, fNewData + dataOffset, size);
|
memcpy(buffer + offset - bufferOffset, fNewData + dataOffset, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,6 +247,8 @@ DataEditor::AddChange(DataChange *change)
|
|||||||
|
|
||||||
fChanges.AddItem(change);
|
fChanges.AddItem(change);
|
||||||
fLastChange = change;
|
fLastChange = change;
|
||||||
|
|
||||||
|
fLastChange->Apply(fRealViewOffset, fView, fRealViewSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user