- fix mistake from fix for 8952 that was breaking layout tests
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 15 Jul 2006 21:03:57 +0000 (21:03 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 15 Jul 2006 21:03:57 +0000 (21:03 +0000)
        * editing/SelectionController.cpp: (WebCore::SelectionController::nodeWillBeRemoved):
        Justin was right! I changed the behavior of the function by accident. Changed it
        back so that it doesn't blow away the selection on the DOM side in the case where
        it didn't before.

        I will write 100 times on the blackboard: "When Justin says something about editing,
        assume he is right."

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

WebCore/ChangeLog
WebCore/editing/SelectionController.cpp

index c6397a1..a04cae2 100644 (file)
@@ -1,5 +1,17 @@
 2006-07-15  Darin Adler  <darin@apple.com>
 
+        - fix mistake from fix for 8952 that was breaking layout tests
+
+        * editing/SelectionController.cpp: (WebCore::SelectionController::nodeWillBeRemoved):
+        Justin was right! I changed the behavior of the function by accident. Changed it
+        back so that it doesn't blow away the selection on the DOM side in the case where
+        it didn't before.
+
+        I will write 100 times on the blackboard: "When Justin says something about editing,
+        assume he is right."
+
+2006-07-15  Darin Adler  <darin@apple.com>
+
         - try to fix Windows build
 
         * WebCore.vcproj/WebCore/WebCore.vcproj: Added StreamingTextDecoderICU.cpp/h.
index a6787a7..620be5f 100644 (file)
@@ -182,18 +182,13 @@ void SelectionController::nodeWillBeRemoved(Node *node)
     bool startRemoved = node == start || (start && start->isAncestor(node));
     bool endRemoved = node == end || (end && end->isAncestor(node));
     
-    bool clearSelection = false;
+    bool clearRenderTreeSelection = false;
+    bool clearDOMTreeSelection = false;
+
     if (startRemoved || endRemoved) {
         // FIXME: When endpoints are removed, we should just alter the selection, instead of blowing it away.
-        clearSelection = true;
-    // FIXME: This could be more efficient if we had an isNodeInRange function on Ranges.
-    } else if (Range::compareBoundaryPoints(m_sel.start(), Position(node, 0)) == -1 &&
-               Range::compareBoundaryPoints(m_sel.end(), Position(node, 0)) == 1) {
-        // If we did nothing here, when this node's renderer was destroyed, the rect that it 
-        // occupied would be invalidated, but, selection gaps that change as a result of 
-        // the removal wouldn't be invalidated.
-        // FIXME: Don't do so much unnecessary invalidation.
-        clearSelection = true;
+        clearRenderTreeSelection = true;
+        clearDOMTreeSelection = true;
     } else if (baseRemoved || extentRemoved) {
         if (m_sel.isBaseFirst()) {
             m_sel.setBase(m_sel.start());
@@ -202,16 +197,26 @@ void SelectionController::nodeWillBeRemoved(Node *node)
             m_sel.setBase(m_sel.start());
             m_sel.setExtent(m_sel.end());
         }
+    // FIXME: This could be more efficient if we had an isNodeInRange function on Ranges.
+    } else if (Range::compareBoundaryPoints(m_sel.start(), Position(node, 0)) == -1 &&
+               Range::compareBoundaryPoints(m_sel.end(), Position(node, 0)) == 1) {
+        // If we did nothing here, when this node's renderer was destroyed, the rect that it 
+        // occupied would be invalidated, but, selection gaps that change as a result of 
+        // the removal wouldn't be invalidated.
+        // FIXME: Don't do so much unnecessary invalidation.
+        clearRenderTreeSelection = true;
     }
 
-    if (clearSelection) {
+    if (clearRenderTreeSelection) {
         // FIXME (6498): This doesn't notify the editing delegate of a selection change.
         RefPtr<Document> document = start->document();
         document->updateRendering();
         if (RenderView* view = static_cast<RenderView*>(document->renderer()))
             view->clearSelection();
-        setSelection(Selection());
     }
+
+    if (clearDOMTreeSelection)
+        setSelection(Selection());
 }
 
 void SelectionController::setModifyBias(EAlter alter, EDirection direction)