Reviewed by Chris
authorkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 24 Aug 2004 17:00:08 +0000 (17:00 +0000)
committerkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 24 Aug 2004 17:00:08 +0000 (17:00 +0000)
        Fix for this bug:

        <rdar://problem/3773564> REGRESSION (125-159): Code to remove HTML styles before applying new HTML styles is broken

        * khtml/editing/htmlediting_impl.cpp:
        (khtml::ApplyStyleCommandImpl::doApply): Unrelated change to constrain downstream position of selection
        start to block boundaries. This is a new feature of the downstream function and I missed this usage
        when adding the feature.
        (khtml::ApplyStyleCommandImpl::removeCSSStyle): There once was code to remove style attributes from spans
        which became emptied as a result of removing CSS properties, but I do not see such code in the
        tree any more. A quick review of the ChangeLog did not reveal anything. I do not remember making such
        a change myself...

        In any case, I have restored logic to prune out styling spans we insert if the process of
        removing styles caused a span-plus-styles node to become emptied of markup which changes the style
        of its contents. This fixes the bug.

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/editing/htmlediting_impl.cpp

index 1e9e360c83da1b9f8d521694776d8387bb2ba0c3..0dfb6f026d9c3801b77e61bb174225c67316c002 100644 (file)
@@ -1,3 +1,24 @@
+2004-08-24  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by Chris
+
+        Fix for this bug:
+        
+        <rdar://problem/3773564> REGRESSION (125-159): Code to remove HTML styles before applying new HTML styles is broken
+
+        * khtml/editing/htmlediting_impl.cpp:
+        (khtml::ApplyStyleCommandImpl::doApply): Unrelated change to constrain downstream position of selection
+        start to block boundaries. This is a new feature of the downstream function and I missed this usage
+        when adding the feature.
+        (khtml::ApplyStyleCommandImpl::removeCSSStyle): There once was code to remove style attributes from spans
+        which became emptied as a result of removing CSS properties, but I do not see such code in the 
+        tree any more. A quick review of the ChangeLog did not reveal anything. I do not remember making such
+        a change myself...
+        
+        In any case, I have restored logic to prune out styling spans we insert if the process of 
+        removing styles caused a span-plus-styles node to become emptied of markup which changes the style
+        of its contents. This fixes the bug.
+
 2004-08-24  Ken Kocienda  <kocienda@apple.com>
 
         Reviewed by John
index 3cc08de3a1aaa59d6ecb0e559bad8ac613349cb6..64716d36d815bbb4515b92da16fd98674899fcc7 100644 (file)
@@ -691,7 +691,7 @@ void ApplyStyleCommandImpl::doApply()
         return;
 
     // adjust to the positions we want to use for applying style
-    Position start(endingSelection().start().downstream().equivalentShallowPosition().equivalentRangeCompliantPosition());
+    Position start(endingSelection().start().downstream(StayInBlock).equivalentRangeCompliantPosition());
     Position end(endingSelection().end().upstream(StayInBlock));
 
     // Remove style from the selection.
@@ -791,9 +791,12 @@ void ApplyStyleCommandImpl::removeCSSStyle(HTMLElementImpl *elem)
         // Check to see if the span is one we added to apply style.
         // If it is, and there are no more attributes on the span other than our
         // class marker, remove the span.
-        NamedAttrMapImpl *map = elem->attributes();
-        if (map && map->length() == 1 && elem->getAttribute(ATTR_CLASS) == styleSpanClassString())
-            removeNodePreservingChildren(elem);
+        if (decl->values()->count() == 0) {
+            removeNodeAttribute(elem, ATTR_STYLE);
+            NamedAttrMapImpl *map = elem->attributes();
+            if (map && map->length() == 1 && elem->getAttribute(ATTR_CLASS) == styleSpanClassString())
+                removeNodePreservingChildren(elem);
+        }
     }
 }