Переглянути джерело

GTextEditor: Shift+Delete should delete the current line.

Andreas Kling 6 роки тому
батько
коміт
838a06096a
2 змінених файлів з 22 додано та 4 видалено
  1. 21 4
      LibGUI/GTextEditor.cpp
  2. 1 0
      LibGUI/GTextEditor.h

+ 21 - 4
LibGUI/GTextEditor.cpp

@@ -379,6 +379,11 @@ void GTextEditor::keydown_event(GKeyEvent& event)
         return;
     }
 
+    if (event.modifiers() == Mod_Shift && event.key() == KeyCode::Key_Delete) {
+        delete_current_line();
+        return;
+    }
+
     if (event.key() == KeyCode::Key_Delete) {
         do_delete();
         return;
@@ -390,12 +395,24 @@ void GTextEditor::keydown_event(GKeyEvent& event)
     return GWidget::keydown_event(event);
 }
 
+void GTextEditor::delete_current_line()
+{
+    if (has_selection())
+        return delete_selection();
+
+    m_lines.remove(m_cursor.line());
+    if (m_lines.is_empty())
+        m_lines.append(make<Line>());
+
+    update_content_size();
+    update();
+}
+
 void GTextEditor::do_delete()
 {
-    if (has_selection()) {
-        delete_selection();
-        return;
-    }
+    if (has_selection())
+        return delete_selection();
+
     if (m_cursor.column() < current_line().length()) {
         // Delete within line
         current_line().remove(m_cursor.column());

+ 1 - 0
LibGUI/GTextEditor.h

@@ -94,6 +94,7 @@ public:
     void copy();
     void paste();
     void do_delete();
+    void delete_current_line();
 
     Function<void(GTextEditor&)> on_return_pressed;
     Function<void(GTextEditor&)> on_escape_pressed;