1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 20:07:36 +00:00

LibGUI: Debounce TextDocument undo stack

This replaces the repeating 2-sec timer with a debounced single-shot
timer on user input.
This commit is contained in:
Carlos César Neves Enumo 2021-05-02 17:57:58 -03:00 committed by Andreas Kling
parent 824bfa9600
commit 97d0028098
2 changed files with 7 additions and 5 deletions

View file

@ -28,10 +28,9 @@ TextDocument::TextDocument(Client* client)
append_line(make<TextDocumentLine>(*this)); append_line(make<TextDocumentLine>(*this));
set_modified(false); set_modified(false);
// FIXME: Instead of a repeating timer, we should punt a deferred single-shot 2-sec timer on user input. m_undo_timer = Core::Timer::create_single_shot(
m_undo_timer = Core::Timer::construct(
2000, [this] { 2000, [this] {
update_undo_timer(); update_undo();
}); });
} }
@ -311,6 +310,9 @@ void TextDocument::notify_did_change()
{ {
set_modified(true); set_modified(true);
if (m_undo_timer)
m_undo_timer->restart();
if (m_client_notifications_enabled) { if (m_client_notifications_enabled) {
for (auto* client : m_clients) for (auto* client : m_clients)
client->document_did_change(); client->document_did_change();
@ -791,7 +793,7 @@ void RemoveTextCommand::undo()
m_document.set_all_cursors(new_cursor); m_document.set_all_cursors(new_cursor);
} }
void TextDocument::update_undo_timer() void TextDocument::update_undo()
{ {
m_undo_stack.finalize_current_combo(); m_undo_stack.finalize_current_combo();
} }

View file

@ -129,7 +129,7 @@ protected:
explicit TextDocument(Client* client); explicit TextDocument(Client* client);
private: private:
void update_undo_timer(); void update_undo();
NonnullOwnPtrVector<TextDocumentLine> m_lines; NonnullOwnPtrVector<TextDocumentLine> m_lines;
Vector<TextDocumentSpan> m_spans; Vector<TextDocumentSpan> m_spans;