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

LibGUI: Ensure the "End" key sets the cursor to the visual line end

We are currently setting the physical mouse position to the visual
cursor content location. In a line containing only a multi-code point
emoji, this would set the cursor to column 1 rather than however many
code points there are.
This commit is contained in:
Timothy Flynn 2023-02-27 08:16:48 -05:00 committed by Tim Flynn
parent a81e1a8c4f
commit 4edd8e8c5e
3 changed files with 17 additions and 5 deletions

View file

@ -1418,6 +1418,19 @@ void TextEditor::set_cursor_to_text_position(Gfx::IntPoint position)
set_cursor({ visual_position.line(), physical_column });
}
void TextEditor::set_cursor_to_end_of_visual_line()
{
for_each_visual_line(m_cursor.line(), [&](auto const&, auto& view, size_t start_of_visual_line, auto) {
if (m_cursor.column() < start_of_visual_line)
return IterationDecision::Continue;
if ((m_cursor.column() - start_of_visual_line) >= view.length())
return IterationDecision::Continue;
set_cursor(m_cursor.line(), start_of_visual_line + view.length());
return IterationDecision::Break;
});
}
void TextEditor::focusin_event(FocusEvent& event)
{
if (event.source() == FocusSource::Keyboard)