Reviewed by me, code change by Ken.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 20 Mar 2005 20:19:04 +0000 (20:19 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 20 Mar 2005 20:19:04 +0000 (20:19 +0000)
        - fixed <rdar://problem/4059852> Deleting from first element of list makes content jump to wrong place

        * khtml/editing/htmlediting.cpp:
        (khtml::isListStructureNode): Added.
        (khtml::DeleteSelectionCommand::moveNodesAfterNode): Check for list nodes as well as table nodes.

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

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

index d0c24d14cfd1052a1cf328e19df616dd07e3809d..d1a7de125784007375bb8d59c54c3144e62b3516 100644 (file)
@@ -1,3 +1,13 @@
+2005-03-20  Darin Adler  <darin@apple.com>
+
+        Reviewed by me, code change by Ken.
+
+        - fixed <rdar://problem/4059852> Deleting from first element of list makes content jump to wrong place
+
+        * khtml/editing/htmlediting.cpp:
+        (khtml::isListStructureNode): Added.
+        (khtml::DeleteSelectionCommand::moveNodesAfterNode): Check for list nodes as well as table nodes.
+
 2005-03-20  Ken Kocienda  <kocienda@apple.com>
 
         Reviewed by me
index e9e4e976c28fc5ce28f27286a2de15422ecdaa1d..a01daab4cebd928b2d20593a9211925a5850568d 100644 (file)
@@ -136,12 +136,22 @@ static inline bool nextCharacterIsCollapsibleWhitespace(const Position &pos)
 
 static const int spacesPerTab = 4;
 
-static inline bool isTableStructureNode(const NodeImpl *node)
+static bool isTableStructureNode(const NodeImpl *node)
 {
     RenderObject *r = node->renderer();
     return (r && (r->isTableCell() || r->isTableRow() || r->isTableSection() || r->isTableCol()));
 }
 
+static bool isListStructureNode(const NodeImpl *node)
+{
+    // FIXME: Irritating that we can get away with just going at the render tree for isTableStructureNode,
+    // but here we also have to peek at the type of DOM node?
+    RenderObject *r = node->renderer();
+    NodeImpl::Id nodeID = node->id();
+    return (r && r->isListItem())
+        || (nodeID == ID_OL || nodeID == ID_UL || nodeID == ID_DD || nodeID == ID_DT || nodeID == ID_DIR || nodeID == ID_MENU);
+}
+
 static DOMString &nonBreakingSpaceString()
 {
     static DOMString nonBreakingSpaceString = QString(QChar(0xa0));
@@ -2964,8 +2974,8 @@ void DeleteSelectionCommand::moveNodesAfterNode()
         return;
 
     NodeImpl *startBlock = startNode->enclosingBlockFlowElement();
-    if (isTableStructureNode(startBlock))
-        // Do not move content between parts of a table
+    if (isTableStructureNode(startBlock) || isListStructureNode(startBlock))
+        // Do not move content between parts of a table or list.
         return;
 
     // Now that we are about to add content, check to see if a placeholder element