Reviewed by Hyatt
authorkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Dec 2004 23:02:06 +0000 (23:02 +0000)
committerkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Dec 2004 23:02:06 +0000 (23:02 +0000)
        Fix for this bug:

        <rdar://problem/3915008> REGRESSION (Mail): Too much white space between lines separated by carriage returns

        There are a number of interesting things we could do to fix this bug, including SPI and involving
        the WebKit delegate, etc., however it seems reasonable to start with a hard-coded default that
        will fix the bug in the general case until such time as we can come up with more specific
        solutions.

        So, I added a helper method to create <p> elements with an inline style that sets top and bottom margins
        to 0.1em.

        * khtml/editing/htmlediting.cpp:
        (khtml::InsertParagraphSeparatorCommand::createParagraphElement): New factory method to create
        paragraph elements to insert. Also adds style information to keep the <p> from having "too-big" margins.
        (khtml::InsertParagraphSeparatorCommand::doApply): Call new factory method.
        * khtml/editing/htmlediting.h: Add createParagraphElement() declaration.

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

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

index e4b8c8b..7f92126 100644 (file)
@@ -1,3 +1,25 @@
+2004-12-10  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by Hyatt
+
+        Fix for this bug:
+        
+        <rdar://problem/3915008> REGRESSION (Mail): Too much white space between lines separated by carriage returns
+
+        There are a number of interesting things we could do to fix this bug, including SPI and involving
+        the WebKit delegate, etc., however it seems reasonable to start with a hard-coded default that
+        will fix the bug in the general case until such time as we can come up with more specific
+        solutions. 
+        
+        So, I added a helper method to create <p> elements with an inline style that sets top and bottom margins
+        to 0.1em.
+
+        * khtml/editing/htmlediting.cpp:
+        (khtml::InsertParagraphSeparatorCommand::createParagraphElement): New factory method to create
+        paragraph elements to insert. Also adds style information to keep the <p> from having "too-big" margins.
+        (khtml::InsertParagraphSeparatorCommand::doApply): Call new factory method.
+        * khtml/editing/htmlediting.h: Add createParagraphElement() declaration.
+
 2004-12-10  Darin Adler  <darin@apple.com>
 
         Reviewed by Hyatt.
index 4f01bae..8add580 100644 (file)
@@ -2157,6 +2157,19 @@ InsertParagraphSeparatorCommand::~InsertParagraphSeparatorCommand()
     derefNodesInList(clonedNodes);
 }
 
+ElementImpl *InsertParagraphSeparatorCommand::createParagraphElement()
+{
+    static DOMString paragraphStyle("margin-top: 0.1em; margin-bottom: 0.1em");
+
+    int exceptionCode = 0;
+    ElementImpl *element = document()->createHTMLElement("p", exceptionCode);
+    ASSERT(exceptionCode == 0);
+    element->setAttribute(ATTR_STYLE, paragraphStyle);
+    element->ref();
+    clonedNodes.append(element);
+    return element;
+}
+
 void InsertParagraphSeparatorCommand::doApply()
 {
     Selection selection = endingSelection();
@@ -2200,22 +2213,17 @@ void InsertParagraphSeparatorCommand::doApply()
     // of the the start block.
     NodeImpl *addedBlock = 0;
     if (startBlock == startBlock->rootEditableElement()) {
-        int exceptionCode = 0;
         if (startBlock->renderer() && !startBlock->renderer()->firstChild()) {
             // No rendered kids in the root editable element.
             // Just inserting a <p> in this situation is not enough, since this operation
             // is supposed to add an additional user-visible line to the content.
             // So, insert an extra <p> to make the one we insert right appear as the second
             // line in the root editable element.
-            NodeImpl *extraBlock = document()->createHTMLElement("P", exceptionCode);
-            ASSERT(exceptionCode == 0);
+            NodeImpl *extraBlock = createParagraphElement();
             appendNode(extraBlock, startBlock);
-            extraBlock->ref();
             insertBlockPlaceholderIfNeeded(extraBlock);
-            clonedNodes.append(extraBlock);
         }
-        addedBlock = document()->createHTMLElement("P", exceptionCode);
-        ASSERT(exceptionCode == 0);
+        addedBlock = createParagraphElement();
         appendNode(addedBlock, startBlock);
     }
     else {
index 39e469b..93c1f5b 100644 (file)
@@ -411,6 +411,8 @@ public:
     virtual void doApply();
 
 private:
+    DOM::ElementImpl *createParagraphElement();
+
     QPtrList<DOM::NodeImpl> ancestors;
     QPtrList<DOM::NodeImpl> clonedNodes;
 };