diff --git a/Libraries/LibWeb/Page/EditEventHandler.cpp b/Libraries/LibWeb/Page/EditEventHandler.cpp index 7b1c47a416d..5d27efe2cf8 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 ba87cc815c7..f1226d66c8c 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 6e0a336bf17..d6ba5eea8d9 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&);