From ce2894c95b1a838d82b53bb1a74acd38312e7839 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 4 Jan 2021 20:48:27 +0100 Subject: [PATCH] LibWeb: Restart the cursor blink cycle whenever the user edits content Having the text cursor disappear during rapid continuous editing is quite jarring, so let's make sure we always restart the blink cycle whenever the user performs some kind of editing action in a frame. --- Libraries/LibWeb/Page/EditEventHandler.cpp | 4 ++++ Libraries/LibWeb/Page/Frame.cpp | 8 ++++++++ Libraries/LibWeb/Page/Frame.h | 2 ++ 3 files changed, 14 insertions(+) diff --git a/Libraries/LibWeb/Page/EditEventHandler.cpp b/Libraries/LibWeb/Page/EditEventHandler.cpp index 7b1c47a416..5d27efe2cf 100644 --- a/Libraries/LibWeb/Page/EditEventHandler.cpp +++ b/Libraries/LibWeb/Page/EditEventHandler.cpp @@ -96,6 +96,8 @@ void EditEventHandler::handle_delete(DOM::Range& range) // remain in the layout tree. This has to be fixed, this just causes everything to be recomputed // which really hurts performance. m_frame.document()->force_layout(); + + m_frame.did_edit({}); } void EditEventHandler::handle_insert(DOM::Position position, u32 code_point) @@ -116,5 +118,7 @@ void EditEventHandler::handle_insert(DOM::Position position, u32 code_point) // remain in the layout tree. This has to be fixed, this just causes everything to be recomputed // which really hurts performance. m_frame.document()->force_layout(); + + m_frame.did_edit({}); } } diff --git a/Libraries/LibWeb/Page/Frame.cpp b/Libraries/LibWeb/Page/Frame.cpp index ba87cc815c..f1226d66c8 100644 --- a/Libraries/LibWeb/Page/Frame.cpp +++ b/Libraries/LibWeb/Page/Frame.cpp @@ -70,6 +70,14 @@ void Frame::setup() }); } +void Frame::did_edit(Badge) +{ + // The user has edited the content, restart the cursor blink cycle so that + // the cursor doesn't disappear during rapid continuous editing. + m_cursor_blink_state = true; + m_cursor_blink_timer->restart(); +} + bool Frame::is_focused_frame() const { return m_page && &m_page->focused_frame() == this; diff --git a/Libraries/LibWeb/Page/Frame.h b/Libraries/LibWeb/Page/Frame.h index 6e0a336bf1..d6ba5eea8d 100644 --- a/Libraries/LibWeb/Page/Frame.h +++ b/Libraries/LibWeb/Page/Frame.h @@ -94,6 +94,8 @@ public: String selected_text() const; + void did_edit(Badge); + private: explicit Frame(DOM::Element& host_element, Frame& main_frame); explicit Frame(Page&);