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.
This commit is contained in:
Andreas Kling 2021-01-04 20:48:27 +01:00
parent 901ef3f1c8
commit ce2894c95b
Notes: sideshowbarker 2024-07-19 00:07:08 +09:00
3 changed files with 14 additions and 0 deletions

View file

@ -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({});
}
}

View file

@ -70,6 +70,14 @@ void Frame::setup()
});
}
void Frame::did_edit(Badge<EditEventHandler>)
{
// 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;

View file

@ -94,6 +94,8 @@ public:
String selected_text() const;
void did_edit(Badge<EditEventHandler>);
private:
explicit Frame(DOM::Element& host_element, Frame& main_frame);
explicit Frame(Page&);