Reviewed by Darin
authorkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 7 Feb 2005 16:32:45 +0000 (16:32 +0000)
committerkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 7 Feb 2005 16:32:45 +0000 (16:32 +0000)
        Fix for this bug:

        <rdar://problem/3953302> Replacing quoted text ends up with blue-colored text that is not quoted

        * khtml/editing/htmlediting.cpp:
        (khtml::DeleteSelectionCommand::doApply): Removed special case delete code for select all. It was
        causing as many bugs as it fixed. What's more, the design concept is a bit shaky. By removing
        this special case, the bug goes away.
        * khtml/editing/htmlediting.h: Remove declaration.

        Test results using selectAll() updated to reflect changed behavior.

        * layout-tests/editing/deleting/delete-3775172-fix-expected.txt:
        * layout-tests/editing/deleting/delete-select-all-001-expected.txt:
        * layout-tests/editing/deleting/delete-select-all-003-expected.txt:
        * layout-tests/editing/inserting/insert-3654864-fix-expected.txt:
        * layout-tests/editing/inserting/insert-3775316-fix-expected.txt:
        * layout-tests/editing/inserting/insert-3851164-fix-expected.txt:
        * layout-tests/editing/inserting/insert-3907422-fix-expected.txt:
        * layout-tests/editing/pasteboard/paste-text-015-expected.txt:

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

LayoutTests/editing/deleting/delete-3775172-fix-expected.txt
LayoutTests/editing/deleting/delete-select-all-001-expected.txt
LayoutTests/editing/deleting/delete-select-all-003-expected.txt
LayoutTests/editing/inserting/insert-3654864-fix-expected.txt
LayoutTests/editing/inserting/insert-3775316-fix-expected.txt
LayoutTests/editing/inserting/insert-3851164-fix-expected.txt
LayoutTests/editing/inserting/insert-3907422-fix-expected.txt
LayoutTests/editing/pasteboard/paste-text-015-expected.txt
WebCore/ChangeLog-2005-08-23
WebCore/khtml/editing/htmlediting.cpp
WebCore/khtml/editing/htmlediting.h

index b94c3f9f168f6b37fbbdc4405c63b9718fd3ce6a..6cfb5ec80c858f676198937bc2053f7ad1fd1b8b 100644 (file)
@@ -3,7 +3,9 @@ layer at (0,0) size 800x600
 layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
+      RenderBlock {DIV} at (0,0) size 784x18
+        RenderBR {BR} at (0,0) size 0x18
 selection is CARET:
-start:      position 0 of child 2 {BODY} of child 1 {HTML} of root {}
-upstream:   position 0 of child 2 {BODY} of child 1 {HTML} of root {}
-downstream: position 0 of child 2 {BODY} of child 1 {HTML} of root {}
+start:      position 0 of child 1 {BR} of root {DIV}
+upstream:   position 0 of  of root {DIV}
+downstream: position 0 of child 1 {BR} of root {DIV}
index ae0614df1cb85f886bf1f68b58f6a067e4614694..664804cf5190ef1cc2f7c98cdb4a43fadec83cb0 100644 (file)
@@ -3,8 +3,22 @@ layer at (0,0) size 800x600
 layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
-      RenderBlock {DIV} at (0,0) size 784x28 [border: (2px solid #FF0000)]
+      RenderBlock {DIV} at (0,0) size 784x50 [border: (2px solid #FF0000)]
+        RenderTable {TABLE} at (14,14) size 22x22 [border: (1px outset #808080)]
+          RenderTableSection {TBODY} at (1,1) size 0x20
+            RenderTableRow {TR} at (0,0) size 0x0
+              RenderTableCell {TD} at (2,2) size 4x4 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
+              RenderTableCell {TD} at (8,2) size 4x4 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
+              RenderTableCell {TD} at (14,2) size 4x4 [border: (1px inset #808080)] [r=0 c=2 rs=1 cs=1]
+            RenderTableRow {TR} at (0,0) size 0x0
+              RenderTableCell {TD} at (2,8) size 4x4 [border: (1px inset #808080)] [r=1 c=0 rs=1 cs=1]
+              RenderTableCell {TD} at (8,8) size 4x4 [border: (1px inset #808080)] [r=1 c=1 rs=1 cs=1]
+              RenderTableCell {TD} at (14,8) size 4x4 [border: (1px inset #808080)] [r=1 c=2 rs=1 cs=1]
+            RenderTableRow {TR} at (0,0) size 0x0
+              RenderTableCell {TD} at (2,14) size 4x4 [border: (1px inset #808080)] [r=2 c=0 rs=1 cs=1]
+              RenderTableCell {TD} at (8,14) size 4x4 [border: (1px inset #808080)] [r=2 c=1 rs=1 cs=1]
+              RenderTableCell {TD} at (14,14) size 4x4 [border: (1px inset #808080)] [r=2 c=2 rs=1 cs=1]
 selection is CARET:
-start:      position 0 of  of root {DIV}
-upstream:   position 0 of  of root {DIV}
-downstream: position 1 of  of root {DIV}
+start:      position 0 of child 1 {TD} of child 1 {TR} of child 1 {TBODY} of child 2 {TABLE} of root {DIV}
+upstream:   position 0 of child 1 {TD} of child 1 {TR} of child 1 {TBODY} of child 2 {TABLE} of root {DIV}
+downstream: position 1 of child 1 {TD} of child 1 {TR} of child 1 {TBODY} of child 2 {TABLE} of root {DIV}
index ae0614df1cb85f886bf1f68b58f6a067e4614694..52153da0599f95dedd2f42575d726008c662dfbd 100644 (file)
@@ -3,8 +3,11 @@ layer at (0,0) size 800x600
 layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
-      RenderBlock {DIV} at (0,0) size 784x28 [border: (2px solid #FF0000)]
+      RenderBlock {DIV} at (0,0) size 784x104 [border: (2px solid #FF0000)]
+        RenderBlock {UL} at (14,38) size 756x28
+          RenderListItem {LI} at (40,0) size 716x28
+            RenderListMarker at (0,0) size 0x22
 selection is CARET:
-start:      position 0 of  of root {DIV}
-upstream:   position 0 of  of root {DIV}
-downstream: position 1 of  of root {DIV}
+start:      position 0 of child 1 {LI} of child 2 {UL} of root {DIV}
+upstream:   position 0 of child 1 {LI} of child 2 {UL} of root {DIV}
+downstream: position 1 of child 1 {LI} of child 2 {UL} of root {DIV}
index 642139399f4030ca4c8db816f01b49dc726b5a37..3cefd27b6dfd84764d14bd56cc19a92fa4257861 100644 (file)
@@ -8,6 +8,6 @@ layer at (0,0) size 800x600
         text run at (14,42) width 36: "xxx"
       RenderBR {BR} at (0,0) size 0x0
 selection is CARET:
-start:      position 3 of child 2 {TEXT} of root {BODY}
-upstream:   position 3 of child 2 {TEXT} of root {BODY}
-downstream: position 0 of child 3 {BR} of root {BODY}
+start:      position 3 of child 3 {TEXT} of root {BODY}
+upstream:   position 3 of child 3 {TEXT} of root {BODY}
+downstream: position 0 of child 4 {BR} of root {BODY}
index e959819e576db2d3d787c64648c0401d31d6af87..0ebe4539a2532fd7ae7be59fdc19853b0d3077ae 100644 (file)
@@ -4,13 +4,15 @@ layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderBlock {DIV} at (0,0) size 784x84 [border: (2px solid #FF0000)]
-        RenderText {TEXT} at (14,14) size 12x28
-          text run at (14,14) width 12: "x"
-        RenderBR {BR} at (0,0) size 0x0
-        RenderText {TEXT} at (14,42) size 12x28
-          text run at (14,42) width 12: "x"
-        RenderBR {BR} at (0,0) size 0x0
+        RenderInline {SPAN} at (0,0) size 12x56
+          RenderText {TEXT} at (14,14) size 12x28
+            text run at (14,14) width 12: "x"
+          RenderBR {BR} at (0,0) size 0x0
+          RenderText {TEXT} at (14,42) size 12x28
+            text run at (14,42) width 12: "x"
+          RenderBR {BR} at (0,0) size 0x0
+        RenderText {TEXT} at (0,0) size 0x0
 selection is CARET:
-start:      position 1 of child 3 {TEXT} of root {DIV}
-upstream:   position 1 of child 3 {TEXT} of root {DIV}
-downstream: position 0 of child 4 {BR} of root {DIV}
+start:      position 1 of child 3 {TEXT} of child 1 {SPAN} of root {DIV}
+upstream:   position 1 of child 3 {TEXT} of child 1 {SPAN} of root {DIV}
+downstream: position 0 of child 4 {BR} of child 1 {SPAN} of root {DIV}
index eb1f3fe5a574b44fca13487123fce1fa22553a5b..44ffbe5a0c9e6aa0b7c69f86c89b5ab916f999c3 100644 (file)
@@ -3,13 +3,10 @@ layer at (0,0) size 800x600
 layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
-      RenderBlock (anonymous) at (0,0) size 784x28
-        RenderInline {SPAN} at (0,0) size 12x28
-          RenderText {TEXT} at (0,0) size 12x28
-            text run at (0,0) width 12: "x"
-        RenderText {TEXT} at (0,0) size 0x0
-        RenderText {TEXT} at (0,0) size 0x0
+      RenderBlock {P} at (0,0) size 784x28
+        RenderText {TEXT} at (0,0) size 12x28
+          text run at (0,0) width 12: "x"
 selection is CARET:
-start:      position 1 of child 1 {TEXT} of child 1 {SPAN} of root {BODY}
-upstream:   position 1 of child 1 {TEXT} of child 1 {SPAN} of root {BODY}
-downstream: position 0 of child 3 {TEXT} of root {BODY}
+start:      position 1 of child 1 {TEXT} of child 1 {P} of root {BODY}
+upstream:   position 1 of child 1 {TEXT} of child 1 {P} of root {BODY}
+downstream: position 1 of child 1 {TEXT} of child 1 {P} of root {BODY}
index 4ddf41ce6acafbb0060c73194b48bc02bdfe2fb2..f8c3eca29ad4285e4390efdce147dfc849409f29 100644 (file)
@@ -3,17 +3,18 @@ layer at (0,0) size 800x600
 layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
-      RenderBlock (anonymous) at (0,0) size 784x18
-        RenderText {TEXT} at (0,0) size 21x18
-          text run at (0,0) width 21: "foo"
-      RenderBlock {BLOCKQUOTE} at (40,34) size 704x18
-        RenderText {TEXT} at (0,0) size 20x18
-          text run at (0,0) width 20: "bar"
-      RenderBlock (anonymous) at (0,68) size 784x18
-        RenderText {TEXT} at (0,0) size 22x18
-          text run at (0,0) width 22: "baz"
-        RenderText {TEXT} at (22,0) size 21x18
-          text run at (22,0) width 21: "foo"
+      RenderBlock {DIV} at (0,0) size 784x86
+        RenderBlock (anonymous) at (0,0) size 784x18
+          RenderText {TEXT} at (0,0) size 21x18
+            text run at (0,0) width 21: "foo"
+        RenderBlock {BLOCKQUOTE} at (40,34) size 704x18
+          RenderText {TEXT} at (0,0) size 20x18
+            text run at (0,0) width 20: "bar"
+        RenderBlock (anonymous) at (0,68) size 784x18
+          RenderText {TEXT} at (0,0) size 22x18
+            text run at (0,0) width 22: "baz"
+          RenderText {TEXT} at (22,0) size 21x18
+            text run at (22,0) width 21: "foo"
       RenderBlock {BLOCKQUOTE} at (40,102) size 704x18
         RenderText {TEXT} at (0,0) size 20x18
           text run at (0,0) width 20: "bar"
@@ -23,6 +24,6 @@ layer at (0,0) size 800x600
         RenderText {TEXT} at (0,0) size 0x0
         RenderText {TEXT} at (0,0) size 0x0
 selection is CARET:
-start:      position 3 of child 6 {TEXT} of root {BODY}
-upstream:   position 3 of child 6 {TEXT} of root {BODY}
+start:      position 3 of child 3 {TEXT} of root {BODY}
+upstream:   position 3 of child 3 {TEXT} of root {BODY}
 downstream: position 0 of child 8 {TEXT} of root {BODY}
index e2987695119f520ede6d6fc47701b26c37852e6b..ba93f356768d466ae8401150ad02571af5c53fb9 100644 (file)
@@ -3,19 +3,22 @@ layer at (0,0) size 800x600
 layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
-      RenderBlock {P} at (0,0) size 784x18
-        RenderText {TEXT} at (0,0) size 21x18
-          text run at (0,0) width 21: "foo"
-      RenderBlock {P} at (0,18) size 784x18
-        RenderText {TEXT} at (0,0) size 20x18
-          text run at (0,0) width 20: "bar"
-      RenderBlock {P} at (0,36) size 784x18
-        RenderText {TEXT} at (0,0) size 21x18
-          text run at (0,0) width 21: "foo"
-      RenderBlock {P} at (0,54) size 784x18
-        RenderText {TEXT} at (0,0) size 20x18
-          text run at (0,0) width 20: "bar"
+      RenderBlock {DIV} at (0,0) size 784x140
+        RenderBlock {DIV} at (0,0) size 784x140 [border: (2px solid #FF0000)]
+          RenderBlock {P} at (14,14) size 756x112
+            RenderBlock {P} at (0,0) size 756x28
+              RenderText {TEXT} at (0,0) size 32x28
+                text run at (0,0) width 32: "foo"
+            RenderBlock {P} at (0,28) size 756x28
+              RenderText {TEXT} at (0,0) size 31x28
+                text run at (0,0) width 31: "bar"
+            RenderBlock {P} at (0,56) size 756x28
+              RenderText {TEXT} at (0,0) size 32x28
+                text run at (0,0) width 32: "foo"
+            RenderBlock {P} at (0,84) size 756x28
+              RenderText {TEXT} at (0,0) size 31x28
+                text run at (0,0) width 31: "bar"
 selection is CARET:
-start:      position 3 of child 1 {TEXT} of child 4 {P} of child 2 {BODY} of child 1 {HTML} of root {}
-upstream:   position 3 of child 1 {TEXT} of child 4 {P} of child 2 {BODY} of child 1 {HTML} of root {}
-downstream: position 3 of child 1 {TEXT} of child 4 {P} of child 2 {BODY} of child 1 {HTML} of root {}
+start:      position 3 of child 1 {TEXT} of child 4 {P} of child 1 {P} of child 2 {DIV} of root {DIV}
+upstream:   position 3 of child 1 {TEXT} of child 4 {P} of child 1 {P} of child 2 {DIV} of root {DIV}
+downstream: position 3 of child 1 {TEXT} of child 4 {P} of child 1 {P} of child 2 {DIV} of root {DIV}
index 66e2ad3ca78f640fe29980e2721bca459c0aed22..ef31483c736cef7159883fd69528e77206ed85ce 100644 (file)
@@ -1,3 +1,28 @@
+2005-02-07  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by Darin
+
+        Fix for this bug:
+        
+        <rdar://problem/3953302> Replacing quoted text ends up with blue-colored text that is not quoted
+
+        * khtml/editing/htmlediting.cpp:
+        (khtml::DeleteSelectionCommand::doApply): Removed special case delete code for select all. It was
+        causing as many bugs as it fixed. What's more, the design concept is a bit shaky. By removing
+        this special case, the bug goes away.
+        * khtml/editing/htmlediting.h: Remove declaration.
+        
+        Test results using selectAll() updated to reflect changed behavior.
+        
+        * layout-tests/editing/deleting/delete-3775172-fix-expected.txt:
+        * layout-tests/editing/deleting/delete-select-all-001-expected.txt:
+        * layout-tests/editing/deleting/delete-select-all-003-expected.txt:
+        * layout-tests/editing/inserting/insert-3654864-fix-expected.txt:
+        * layout-tests/editing/inserting/insert-3775316-fix-expected.txt:
+        * layout-tests/editing/inserting/insert-3851164-fix-expected.txt:
+        * layout-tests/editing/inserting/insert-3907422-fix-expected.txt:
+        * layout-tests/editing/pasteboard/paste-text-015-expected.txt:
+
 2005-02-06  Darin Adler  <darin@apple.com>
 
         Reviewed by Ken.
index bf85de750b32678b219533134eb078babf434740..8c5f00c52f9c197758e0af1b55c2799276b3d1b6 100644 (file)
@@ -2283,27 +2283,6 @@ void DeleteSelectionCommand::saveTypingStyleState()
     computedStyle->deref();
 }
 
-bool DeleteSelectionCommand::handleSpecialCaseAllContentDelete()
-{
-    Position start = m_downstreamStart;
-    Position end = m_upstreamEnd;
-
-    ElementImpl *rootElement = start.node()->rootEditableElement();
-    Position rootStart = Position(rootElement, 0);
-    Position rootEnd = Position(rootElement, rootElement ? rootElement->childNodeCount() : 0).equivalentDeepPosition();
-    if (start == VisiblePosition(rootStart).downstreamDeepEquivalent() && end == VisiblePosition(rootEnd).deepEquivalent()) {
-        // Delete every child of the root editable element
-        NodeImpl *node = rootElement->firstChild();
-        while (node) {
-            NodeImpl *next = node->traverseNextSibling();
-            removeNode(node);
-            node = next;
-        }
-        return true;
-    }
-    return false;
-}
-
 bool DeleteSelectionCommand::handleSpecialCaseBRDelete()
 {
     // Check for special-case where the selection contains only a BR on a line by itself after another BR.
@@ -2699,9 +2678,8 @@ void DeleteSelectionCommand::doApply()
     saveTypingStyleState();
     insertPlaceholderForAncestorBlockContent();
     
-    if (!handleSpecialCaseAllContentDelete())
-        if (!handleSpecialCaseBRDelete())
-            handleGeneralDelete();
+    if (!handleSpecialCaseBRDelete())
+        handleGeneralDelete();
     
     // Do block merge if start and end of selection are in different blocks.
     moveNodesAfterNode();
index 72f49d1fe13403e52432dd9228bbb45f7e937f32..e5e810c51ca396961470fff1acabf919aa10e5e3 100644 (file)
@@ -348,7 +348,6 @@ private:
     void initializePositionData();
     void saveTypingStyleState();
     void insertPlaceholderForAncestorBlockContent();
-    bool handleSpecialCaseAllContentDelete();
     bool handleSpecialCaseBRDelete();
     void handleGeneralDelete();
     void fixupWhitespace();