Reviewed by Harrison
authorkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 18 Mar 2005 15:56:56 +0000 (15:56 +0000)
committerkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 18 Mar 2005 15:56:56 +0000 (15:56 +0000)
        Fix for this bug:

        <rdar://problem/4051809> 8A413: Cursor-up in a mail message sometimes gets stuck (with specific reproducible case)

        * khtml/rendering/render_text.cpp:
        (RenderText::positionForCoordinates): Consider two lines: line-above and line-below. If the caret position in line-below
        was at an x coordinate between half way through the x coordinate of the last character on the line-above and the
        end of that same character, this bug would happen since the positioning code would assume that it could create a
        VisiblePosition with a DOWNSTREAM affinity. Now, I check to see if the character position on the line-above is the
        last character on that line, and if it is, I use UPSTREAM as the affinity.

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/rendering/render_text.cpp

index 394a21a94d08d1eb43dfb61486c034acb8176fad..aeefe3046242d5985b37d0949d41c382f6f88a0c 100644 (file)
@@ -1,3 +1,18 @@
+2005-03-17  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by Harrison
+
+        Fix for this bug:
+        
+        <rdar://problem/4051809> 8A413: Cursor-up in a mail message sometimes gets stuck (with specific reproducible case)
+
+        * khtml/rendering/render_text.cpp:
+        (RenderText::positionForCoordinates): Consider two lines: line-above and line-below. If the caret position in line-below
+        was at an x coordinate between half way through the x coordinate of the last character on the line-above and the
+        end of that same character, this bug would happen since the positioning code would assume that it could create a 
+        VisiblePosition with a DOWNSTREAM affinity. Now, I check to see if the character position on the line-above is the 
+        last character on that line, and if it is, I use UPSTREAM as the affinity.
+
 === Safari-407 ===
 
 2005-03-17  David Harrison  <harrison@apple.com>
index e135ffc868036f941d5e001b0994e33d5a593e3c..3b6af0dc406e39d21da4c525f88bd5516fd2d5f5 100644 (file)
@@ -946,8 +946,10 @@ VisiblePosition RenderText::positionForCoordinates(int _x, int _y)
                 // and the x coordinate is to the left of the right edge of this box
                 // check to see if position goes in this box
                 int offset = box->offsetForPosition(_x - absx);
-                if (offset != -1)
-                    return VisiblePosition(element(), offset + box->m_start, DOWNSTREAM);
+                if (offset != -1) {
+                    EAffinity affinity = offset >= box->m_len && !box->nextOnLine() ? UPSTREAM : DOWNSTREAM;
+                    return VisiblePosition(element(), offset + box->m_start, affinity);
+                }
             }
             else if (!box->prevOnLine() && _x < absx + box->m_x) {
                 // box is first on line