diff --git a/LibGUI/GTextEditor.cpp b/LibGUI/GTextEditor.cpp index 8443c2c594..bbaaface65 100644 --- a/LibGUI/GTextEditor.cpp +++ b/LibGUI/GTextEditor.cpp @@ -458,6 +458,17 @@ void GTextEditor::insert_at_cursor(char ch) set_cursor(m_cursor.line() + 1, 0); return; } + if (ch == '\t') { + int next_soft_tab_stop = ((m_cursor.column() + m_soft_tab_width) / m_soft_tab_width) * m_soft_tab_width; + int spaces_to_insert = next_soft_tab_stop - m_cursor.column(); + for (int i = 0; i < spaces_to_insert; ++i) { + current_line().insert(m_cursor.column(), ' '); + } + update_scrollbar_ranges(); + set_cursor(m_cursor.line(), next_soft_tab_stop); + update_cursor(); + return; + } current_line().insert(m_cursor.column(), ch); update_scrollbar_ranges(); set_cursor(m_cursor.line(), m_cursor.column() + 1); diff --git a/LibGUI/GTextEditor.h b/LibGUI/GTextEditor.h index 28c30e709f..de6e0355a5 100644 --- a/LibGUI/GTextEditor.h +++ b/LibGUI/GTextEditor.h @@ -150,5 +150,6 @@ private: bool m_cursor_state { true }; bool m_in_drag_select { false }; int m_line_spacing { 2 }; + int m_soft_tab_width { 4 }; GTextRange m_selection; };