diff --git a/layout/generic/nsFrame.cpp b/layout/generic/nsFrame.cpp index 185c4425d57..9728205e42d 100644 --- a/layout/generic/nsFrame.cpp +++ b/layout/generic/nsFrame.cpp @@ -5900,7 +5900,18 @@ nsFrame::GetPointFromOffset(int32_t inOffset, nsPoint* outPoint) if (newContent){ int32_t newOffset = newContent->IndexOf(mContent); - bool isRTL = (NS_GET_EMBEDDING_LEVEL(this) & 1) == 1; + // Find the direction of the frame from the EmbeddingLevelProperty, + // which is the resolved bidi level set in + // nsBidiPresUtils::ResolveParagraph (odd levels = right-to-left). + // If the embedding level isn't set, just use the CSS direction + // property. + bool hasEmbeddingLevel; + nsBidiLevel embeddingLevel = + NS_PTR_TO_INT32(Properties().Get(nsIFrame::EmbeddingLevelProperty(), + &hasEmbeddingLevel)); + bool isRTL = hasEmbeddingLevel + ? (embeddingLevel & 1) == 1 + : StyleVisibility()->mDirection == NS_STYLE_DIRECTION_RTL; if ((!isRTL && inOffset > newOffset) || (isRTL && inOffset <= newOffset)) { pt = contentRect.TopRight();