From 77360e4a6b60f89aa0b03fcea40e640b371a2bc4 Mon Sep 17 00:00:00 2001 From: Allan Odgaard Date: Mon, 10 Sep 2012 22:46:50 +0200 Subject: [PATCH] Proper undo management for external changes This fixes issue #50. --- Frameworks/document/src/document.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Frameworks/document/src/document.cc b/Frameworks/document/src/document.cc index 809b1941..b932ea44 100644 --- a/Frameworks/document/src/document.cc +++ b/Frameworks/document/src/document.cc @@ -953,18 +953,22 @@ namespace document else if(!_document->is_modified()) { D(DBF_Document_WatchFS, bug("changed on disk and we have no local changes, so reverting to that\n");); + _document->undo_manager().begin_undo_group(ng::ranges_t(0)); _document->_buffer->replace(0, _document->_buffer->size(), yours); _document->_buffer->bump_revision(); _document->check_modified(_document->_buffer->revision(), _document->_buffer->revision()); _document->mark_pristine(); + _document->undo_manager().end_undo_group(ng::ranges_t(0)); } else { bool conflict = false; std::string const& merged = merge(_document->_pristine_buffer, mine, yours, &conflict); D(DBF_Document_WatchFS, bug("changed on disk and we have local changes, merge conflict %s.\n%s\n", BSTR(conflict), merged.c_str());); + _document->undo_manager().begin_undo_group(ng::ranges_t(0)); _document->_buffer->replace(0, _document->_buffer->size(), merged); _document->set_revision(_document->_buffer->bump_revision()); + _document->undo_manager().end_undo_group(ng::ranges_t(0)); // TODO if there was a conflict, we shouldn’t take the merged content (but ask user what to do) // TODO mark_pristine() but using ‘yours’ }