Bug 1232322. Allow caret movement to stop at break opportunities induced by collapsed whitespace. r=mats draft
authorRobert O'Callahan <robert@ocallahan.org>
Wed, 02 Mar 2016 10:22:17 +1300
changeset 335887 e989baa4b1386298730d5f29b2cd23b2bf53223b
parent 335327 faa614e2ad4eff5e04c9886bd39f63ebe20fe00c
child 515250 fe91a0b78fd80e4c61482c775783deb1628fde3c
push id11914
push userrocallahan@mozilla.com
push dateTue, 01 Mar 2016 21:42:42 +0000
reviewersmats
bugs1232322
milestone47.0a1
Bug 1232322. Allow caret movement to stop at break opportunities induced by collapsed whitespace. r=mats MozReview-Commit-ID: Eu85ceDbIu8
layout/generic/nsTextFrame.cpp
layout/generic/test/test_movement_by_words.html
--- a/layout/generic/nsTextFrame.cpp
+++ b/layout/generic/nsTextFrame.cpp
@@ -7464,27 +7464,25 @@ ClusterIterator::NextCluster()
   gfxTextRun* textRun = mTextFrame->GetTextRun(nsTextFrame::eInflated);
 
   mHaveWordBreak = false;
   while (true) {
     bool keepGoing = false;
     if (mDirection > 0) {
       if (mIterator.GetOriginalOffset() >= mTrimmed.GetEnd())
         return false;
-      keepGoing = mIterator.IsOriginalCharSkipped() ||
-          mIterator.GetOriginalOffset() < mTrimmed.mStart ||
+      keepGoing = mIterator.GetOriginalOffset() < mTrimmed.mStart ||
           !textRun->IsClusterStart(mIterator.GetSkippedOffset());
       mCharIndex = mIterator.GetOriginalOffset();
       mIterator.AdvanceOriginal(1);
     } else {
       if (mIterator.GetOriginalOffset() <= mTrimmed.mStart)
         return false;
       mIterator.AdvanceOriginal(-1);
-      keepGoing = mIterator.IsOriginalCharSkipped() ||
-          mIterator.GetOriginalOffset() >= mTrimmed.GetEnd() ||
+      keepGoing = mIterator.GetOriginalOffset() >= mTrimmed.GetEnd() ||
           !textRun->IsClusterStart(mIterator.GetSkippedOffset());
       mCharIndex = mIterator.GetOriginalOffset();
     }
 
     if (mWordBreaks[GetBeforeOffset() - mTextFrame->GetContentOffset()]) {
       mHaveWordBreak = true;
     }
     if (!keepGoing)
--- a/layout/generic/test/test_movement_by_words.html
+++ b/layout/generic/test/test_movement_by_words.html
@@ -180,16 +180,24 @@ function test1() {
   // test for bug 1066756
   editor.innerHTML = "hello" + ModifierColon + " wo" + ModifierColon + "rld";
   sel.collapse(editor.firstChild, 0);
   testRight(editor.firstChild, 6);
   testRight(editor.firstChild, 13);
   testLeft(editor.firstChild, 7);
   testLeft(editor.firstChild, 0);
 
+  // test for bug 1232322
+  editor.innerHTML = "Hello <span></span> Kitty";
+  sel.collapse(editor.firstChild, 0);
+  testRight(editor.firstChild, 5);
+  testRight(editor.firstChild.nextSibling.nextSibling, 6);
+  testLeft(editor.firstChild.nextSibling.nextSibling, 1);
+  testLeft(editor.firstChild, 0);
+
   // test basic word movement with eat_space_next_to_word true.
   setPrefs(true, true, test2);
 }
 
 function test2() {
   editor.innerHTML = "Hello Kitty";
   sel.collapse(editor.firstChild, 0);
   testRight(editor.firstChild, 6);