Reviewed by Trey
authorkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 12 Aug 2004 23:28:33 +0000 (23:28 +0000)
committerkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 12 Aug 2004 23:28:33 +0000 (23:28 +0000)
        Fix for this bug:

        <rdar://problem/3695446> shift-down-arrow on last line of editable text should select to end of document

        Detect when current position is on first or last line and move to the
        start or end of that line, respectively.

        * khtml/xml/dom_position.cpp:
        (DOM::Position::previousLinePosition)
        (DOM::Position::nextLinePosition)

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/xml/dom_position.cpp

index 8d07520e20908caec33f06e11d246c043cafc617..707b5d8a20eaec904f22cca45ecbb21d78dbae08 100644 (file)
@@ -1,3 +1,18 @@
+2004-08-12  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by Trey
+
+        Fix for this bug:
+        
+        <rdar://problem/3695446> shift-down-arrow on last line of editable text should select to end of document
+        
+        Detect when current position is on first or last line and move to the
+        start or end of that line, respectively.
+
+        * khtml/xml/dom_position.cpp:
+        (DOM::Position::previousLinePosition)
+        (DOM::Position::nextLinePosition)
+
 === Safari-156 ===
 
 2004-08-12  Ken Kocienda  <kocienda@apple.com>
index bb2925b4e255f25d58c7f2adee2c512d46125e6e..473b19003d416c1f47daa3a86a473b856928563a 100644 (file)
@@ -534,7 +534,10 @@ Position Position::previousLinePosition(int x) const
         return renderer->positionForCoordinates(x, absy + root->topOverflow());
     }
     
-    return *this;
+    // Could not find a previous line. This means we must already be on the first line.
+    // Move to the start of the content in this block, which effectively moves us
+    // to the start of the line we're on.
+    return Position(node()->rootEditableElement(), 0);
 }
 
 Position Position::nextLinePosition(int x) const
@@ -588,9 +591,13 @@ Position Position::nextLinePosition(int x) const
         containingBlock->absolutePosition(absx, absy);
         RenderObject *renderer = root->closestLeafChildForXPos(x, absx)->object();
         return renderer->positionForCoordinates(x, absy + root->topOverflow());
-    }
+    }    
 
-    return *this;
+    // Could not find a next line. This means we must already be on the last line.
+    // Move to the end of the content in this block, which effectively moves us
+    // to the end of the line we're on.
+    ElementImpl *rootElement = node()->rootEditableElement();
+    return Position(rootElement, rootElement->childNodeCount());
 }
 
 Position Position::equivalentUpstreamPosition() const