summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Atkins <atkinssj@serenityos.org>2023-01-12 17:29:08 +0000
committerAndreas Kling <kling@serenityos.org>2023-01-13 13:37:19 +0100
commita5ff6769f5eece607b45dde102e5af59a0062ece (patch)
tree20b224e45a6094e0a41df53e9fee6878e4592bdb
parent7164b2f7580b1cde264c01896c9914c69512b57e (diff)
downloadserenity-a5ff6769f5eece607b45dde102e5af59a0062ece.zip
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. :^)
-rw-r--r--Userland/Libraries/LibGUI/TextDocument.cpp7
-rw-r--r--Userland/Libraries/LibGUI/TextDocument.h7
2 files changed, 8 insertions, 6 deletions
diff --git a/Userland/Libraries/LibGUI/TextDocument.cpp b/Userland/Libraries/LibGUI/TextDocument.cpp
index e238660af7..75df12e256 100644
--- a/Userland/Libraries/LibGUI/TextDocument.cpp
+++ b/Userland/Libraries/LibGUI/TextDocument.cpp
@@ -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);
}
diff --git a/Userland/Libraries/LibGUI/TextDocument.h b/Userland/Libraries/LibGUI/TextDocument.h
index 912354f04d..3bae9594fa 100644
--- a/Userland/Libraries/LibGUI/TextDocument.h
+++ b/Userland/Libraries/LibGUI/TextDocument.h
@@ -270,17 +270,18 @@ private:
class ReplaceAllTextCommand final : public GUI::TextDocumentUndoCommand {
public:
- ReplaceAllTextCommand(GUI::TextDocument& document, DeprecatedString const& text, GUI::TextRange const& range, DeprecatedString const& action_text);
+ ReplaceAllTextCommand(GUI::TextDocument& document, DeprecatedString const& new_text, GUI::TextRange const& range, DeprecatedString const& action_text);
virtual ~ReplaceAllTextCommand() = default;
void redo() override;
void undo() override;
bool merge_with(GUI::Command const&) override;
DeprecatedString action_text() const override;
- DeprecatedString const& text() const { return m_text; }
+ DeprecatedString const& text() const { return m_new_text; }
TextRange const& range() const { return m_range; }
private:
- DeprecatedString m_text;
+ DeprecatedString m_original_text;
+ DeprecatedString m_new_text;
GUI::TextRange m_range;
DeprecatedString m_action_text;
};