Reviewed by Harrison
authorkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 10 Nov 2004 19:04:35 +0000 (19:04 +0000)
committerkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 10 Nov 2004 19:04:35 +0000 (19:04 +0000)
        (khtml::DeleteSelectionCommand::performGeneralDelete): Add some more comments to
        make things more clear.
        * khtml/editing/selection.cpp:
        (khtml::Selection::toRange): Fixed the upstream and downstream calls so that the
        resulting positions do not cross block boundaries. This was a bug and caused some
        delete problems when whole blocks were selected. I will be addressing that issue
        more fully in upcoming changes.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@7968 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/editing/SelectionController.cpp
WebCore/khtml/editing/htmlediting.cpp
WebCore/khtml/editing/selection.cpp

index 2021208a149c631fd960096825a4ad71f2b3c048..78711efb7dd3b49a42bc23ac2b9bc3f3d27fa604 100644 (file)
@@ -1,3 +1,15 @@
+2004-11-10  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by Harrison
+
+        (khtml::DeleteSelectionCommand::performGeneralDelete): Add some more comments to
+        make things more clear.
+        * khtml/editing/selection.cpp:
+        (khtml::Selection::toRange): Fixed the upstream and downstream calls so that the 
+        resulting positions do not cross block boundaries. This was a bug and caused some
+        delete problems when whole blocks were selected. I will be addressing that issue
+        more fully in upcoming changes.
+
 2004-11-10  Ken Kocienda  <kocienda@apple.com>
 
         Reviewed by Harrison
index cc7885aa92e429ac8c19b5119c5f0e53308c9f65..a62bf61b015659d8a36fad2f11836f2c659d138d 100644 (file)
@@ -635,8 +635,8 @@ Range Selection::toRange() const
         //                       ^ selected
         //
         ASSERT(isRange());
-        s = m_start.downstream();
-        e = m_end.upstream();
+        s = m_start.downstream(StayInBlock);
+        e = m_end.upstream(StayInBlock);
         if (RangeImpl::compareBoundaryPoints(s.node(), s.offset(), e.node(), e.offset()) > 0) {
             // Make sure the start is before the end.
             // The end can wind up before the start if collapsed whitespace is the only thing selected.
index 296ca6159e1b1b5f6e4a099249726d1e7d9f28bd..d93d6bf0071b0d061b543c26c3455913db096025 100644 (file)
@@ -1453,7 +1453,7 @@ Position DeleteSelectionCommand::endPositionForDelete() const
     Position rootEnd = Position(rootElement, rootElement ? rootElement->childNodeCount() : 0).equivalentDeepPosition();
     if (pos == VisiblePosition(rootEnd).deepEquivalent())
         pos = rootEnd;
-    else if (m_smartDelete && pos.leadingWhitespacePosition().isNotNull())
+    else if (m_smartDelete && pos.trailingWhitespacePosition().isNotNull())
         pos = VisiblePosition(pos).next().deepEquivalent();
     return pos;
 }
@@ -1507,6 +1507,9 @@ void DeleteSelectionCommand::performGeneralDelete()
     int startOffset = m_upstreamStart.offset();
 
     if (startOffset >= m_startNode->caretMaxOffset()) {
+        // Move the start node to the next node in the tree since the startOffset is equal to
+        // or beyond the start node's caretMaxOffset This means there is nothing visible to delete. 
+        // However, before moving on, delete any insignificant text that may be present in a text node.
         if (m_startNode->isTextNode()) {
             // Delete any insignificant text from this node.
             TextImpl *text = static_cast<TextImpl *>(m_startNode);
@@ -1523,7 +1526,7 @@ void DeleteSelectionCommand::performGeneralDelete()
     }
 
     if (m_startNode == m_downstreamEnd.node()) {
-        // handle delete in one node
+        // The selection to delete is all in one node.
         if (!m_startNode->renderer() || 
             (startOffset <= m_startNode->caretMinOffset() && m_downstreamEnd.offset() >= m_startNode->caretMaxOffset())) {
             // just delete
@@ -1537,6 +1540,7 @@ void DeleteSelectionCommand::performGeneralDelete()
         }
     }
     else {
+        // The selection to delete spans more than one node.
         NodeImpl *node = m_startNode;
         
         if (startOffset > 0) {
index cc7885aa92e429ac8c19b5119c5f0e53308c9f65..a62bf61b015659d8a36fad2f11836f2c659d138d 100644 (file)
@@ -635,8 +635,8 @@ Range Selection::toRange() const
         //                       ^ selected
         //
         ASSERT(isRange());
-        s = m_start.downstream();
-        e = m_end.upstream();
+        s = m_start.downstream(StayInBlock);
+        e = m_end.upstream(StayInBlock);
         if (RangeImpl::compareBoundaryPoints(s.node(), s.offset(), e.node(), e.offset()) > 0) {
             // Make sure the start is before the end.
             // The end can wind up before the start if collapsed whitespace is the only thing selected.