Bläddra i källkod

GTextEditor: Implement Shift+Delete using RemoveTextCommand

Andreas Kling 5 år sedan
förälder
incheckning
32be9941f4
1 ändrade filer med 15 tillägg och 7 borttagningar
  1. 15 7
      Libraries/LibGUI/GTextEditor.cpp

+ 15 - 7
Libraries/LibGUI/GTextEditor.cpp

@@ -804,13 +804,21 @@ void GTextEditor::delete_current_line()
     if (has_selection())
     if (has_selection())
         return delete_selection();
         return delete_selection();
 
 
-    document().remove_line(m_cursor.line());
-    if (lines().is_empty())
-        document().append_line(make<GTextDocumentLine>(document()));
-    m_cursor.set_column(0);
+    GTextPosition start;
+    GTextPosition end;
+    if (m_cursor.line() == 0 && lines().size() == 1) {
+        start = { 0, 0 };
+        end = { 0, line(0).length() };
+    } else if (m_cursor.line() == lines().size() - 1) {
+        start = { m_cursor.line() - 1, line(m_cursor.line()).length() };
+        end = { m_cursor.line(), line(m_cursor.line()).length() };
+    } else {
+        start = { m_cursor.line(), 0 };
+        end = { m_cursor.line() + 1, 0 };
+    }
 
 
-    update_content_size();
-    update();
+    GTextRange erased_range(start, end);
+    execute<RemoveTextCommand>(document().text_in_range(erased_range), erased_range);
 }
 }
 
 
 void GTextEditor::do_delete()
 void GTextEditor::do_delete()
@@ -1365,8 +1373,8 @@ void GTextEditor::document_did_insert_line(int line_index)
 
 
 void GTextEditor::document_did_change()
 void GTextEditor::document_did_change()
 {
 {
-    ensure_cursor_is_valid();
     recompute_all_visual_lines();
     recompute_all_visual_lines();
+    ensure_cursor_is_valid();
     update();
     update();
 
 
     undo_action().set_enabled(can_undo());
     undo_action().set_enabled(can_undo());