Bläddra i källkod

GTextEditor: Shift+Delete should delete the current line.

Andreas Kling 6 år sedan
förälder
incheckning
838a06096a
2 ändrade filer med 22 tillägg och 4 borttagningar
  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;
         return;
     }
     }
 
 
+    if (event.modifiers() == Mod_Shift && event.key() == KeyCode::Key_Delete) {
+        delete_current_line();
+        return;
+    }
+
     if (event.key() == KeyCode::Key_Delete) {
     if (event.key() == KeyCode::Key_Delete) {
         do_delete();
         do_delete();
         return;
         return;
@@ -390,12 +395,24 @@ void GTextEditor::keydown_event(GKeyEvent& event)
     return GWidget::keydown_event(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()
 void GTextEditor::do_delete()
 {
 {
-    if (has_selection()) {
-        delete_selection();
-        return;
-    }
+    if (has_selection())
+        return delete_selection();
+
     if (m_cursor.column() < current_line().length()) {
     if (m_cursor.column() < current_line().length()) {
         // Delete within line
         // Delete within line
         current_line().remove(m_cursor.column());
         current_line().remove(m_cursor.column());

+ 1 - 0
LibGUI/GTextEditor.h

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