LibGUI: Make undo work for TextDocument ReplaceAllTextCommand

The undo code here was just replacing the new text with the new text.
Now we actually save the old text and use that instead. :^)
This commit is contained in:
Sam Atkins 2023-01-12 17:29:08 +00:00 committed by Andreas Kling
commit a5ff6769f5
Notes: sideshowbarker 2024-07-17 18:13:59 +09:00
2 changed files with 8 additions and 6 deletions

View file

@ -970,7 +970,8 @@ DeprecatedString InsertLineCommand::action_text() const
ReplaceAllTextCommand::ReplaceAllTextCommand(GUI::TextDocument& document, DeprecatedString const& text, GUI::TextRange const& range, DeprecatedString const& action_text)
: TextDocumentUndoCommand(document)
, m_text(text)
, m_original_text(document.text())
, m_new_text(text)
, m_range(range)
, m_action_text(action_text)
{
@ -980,7 +981,7 @@ void ReplaceAllTextCommand::redo()
{
m_document.remove(m_range);
m_document.set_all_cursors(m_range.start());
auto new_cursor = m_document.insert_at(m_range.start(), m_text, m_client);
auto new_cursor = m_document.insert_at(m_range.start(), m_new_text, m_client);
m_range.set_end(new_cursor);
m_document.set_all_cursors(new_cursor);
}
@ -989,7 +990,7 @@ void ReplaceAllTextCommand::undo()
{
m_document.remove(m_range);
m_document.set_all_cursors(m_range.start());
auto new_cursor = m_document.insert_at(m_range.start(), m_text);
auto new_cursor = m_document.insert_at(m_range.start(), m_original_text, m_client);
m_range.set_end(new_cursor);
m_document.set_all_cursors(new_cursor);
}