summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibGUI
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibGUI')
-rw-r--r--Userland/Libraries/LibGUI/TextEditor.cpp17
-rw-r--r--Userland/Libraries/LibGUI/TextEditor.h1
2 files changed, 18 insertions, 0 deletions
diff --git a/Userland/Libraries/LibGUI/TextEditor.cpp b/Userland/Libraries/LibGUI/TextEditor.cpp
index dfdedb3d08..6e53fec67b 100644
--- a/Userland/Libraries/LibGUI/TextEditor.cpp
+++ b/Userland/Libraries/LibGUI/TextEditor.cpp
@@ -918,6 +918,11 @@ void TextEditor::keydown_event(KeyEvent& event)
indent_selection();
return;
}
+ } else {
+ if (event.modifiers() == Mod_Shift) {
+ unindent_line();
+ return;
+ }
}
}
@@ -1050,6 +1055,18 @@ void TextEditor::unindent_selection()
}
}
+void TextEditor::unindent_line()
+{
+ if (current_line().first_non_whitespace_column() != 0) {
+ auto const unindent_size = current_line().leading_spaces() < m_soft_tab_width ? current_line().leading_spaces() : m_soft_tab_width;
+ auto const temp_column = m_cursor.column();
+
+ execute<UnindentSelection>(unindent_size, TextRange({ m_cursor.line(), 0 }, { m_cursor.line(), line(m_cursor.line()).length() }));
+
+ set_cursor({ m_cursor.line(), temp_column <= unindent_size ? 0 : temp_column - unindent_size });
+ }
+}
+
void TextEditor::delete_previous_word()
{
TextRange to_erase(document().first_word_before(m_cursor, true), m_cursor);
diff --git a/Userland/Libraries/LibGUI/TextEditor.h b/Userland/Libraries/LibGUI/TextEditor.h
index 9a9b69f0a8..e6f4d13f31 100644
--- a/Userland/Libraries/LibGUI/TextEditor.h
+++ b/Userland/Libraries/LibGUI/TextEditor.h
@@ -158,6 +158,7 @@ public:
bool is_indenting_selection();
void indent_selection();
void unindent_selection();
+ void unindent_line();
Function<void()> on_change;
Function<void(bool modified)> on_modified_change;