diff --git a/accessible/base/TextLeafRange.cpp b/accessible/base/TextLeafRange.cpp index 91bca2f873e1..385b13448664 100644 --- a/accessible/base/TextLeafRange.cpp +++ b/accessible/base/TextLeafRange.cpp @@ -439,14 +439,24 @@ TextLeafPoint::TextLeafPoint(Accessible* aAcc, int32_t aOffset) { if (aOffset != nsIAccessibleText::TEXT_OFFSET_CARET && aAcc->HasChildren()) { // Find a leaf. This might not necessarily be a TextLeafAccessible; it // could be an empty container. - for (Accessible* acc = aAcc->FirstChild(); acc; acc = acc->FirstChild()) { + auto GetChild = [&aOffset](Accessible* acc) -> Accessible* { + return aOffset != nsIAccessibleText::TEXT_OFFSET_END_OF_TEXT + ? acc->FirstChild() + : acc->LastChild(); + }; + + for (Accessible* acc = GetChild(aAcc); acc; acc = GetChild(acc)) { mAcc = acc; } - mOffset = 0; + mOffset = aOffset != nsIAccessibleText::TEXT_OFFSET_END_OF_TEXT + ? 0 + : nsAccUtils::TextLength(mAcc); return; } mAcc = aAcc; - mOffset = aOffset; + mOffset = aOffset != nsIAccessibleText::TEXT_OFFSET_END_OF_TEXT + ? aOffset + : nsAccUtils::TextLength(mAcc); } bool TextLeafPoint::operator<(const TextLeafPoint& aPoint) const {