diff --git a/layout/xul/base/src/tree/src/nsTreeColFrame.cpp b/layout/xul/base/src/tree/src/nsTreeColFrame.cpp index 3c9c061e52b3..01e05e125341 100644 --- a/layout/xul/base/src/tree/src/nsTreeColFrame.cpp +++ b/layout/xul/base/src/tree/src/nsTreeColFrame.cpp @@ -116,6 +116,13 @@ nsDisplayXULTreeColSplitterTarget::HitTest(nsDisplayListBuilder* aBuilder, else if (nsPresContext::CSSPixelsToAppUnits(4) > pt.x) left = PR_TRUE; + // Swap left and right for RTL trees in order to find the correct splitter + if (mFrame->GetStyleVisibility()->mDirection == NS_STYLE_DIRECTION_RTL) { + PRBool tmp = left; + left = right; + right = tmp; + } + if (left || right) { // We are a header. Look for the correct splitter. nsFrameList frames(mFrame->GetParent()->GetFirstChild(nsnull)); diff --git a/toolkit/content/widgets/tree.xml b/toolkit/content/widgets/tree.xml index b14ed606aa9c..4c7418869174 100644 --- a/toolkit/content/widgets/tree.xml +++ b/toolkit/content/widgets/tree.xml @@ -209,25 +209,35 @@ 0) { currentX += cw; if (currentX - (cw * aThresh) > adjustedX) return col.element; } - lastCol = col; - col = col.getNext(); } - if (aPos) aPos.value = "after"; - return lastCol.element; + if (aPos) + aPos.value = isRTL ? "before" : "after"; + return columns.pop().element; ]]> diff --git a/toolkit/themes/gnomestripe/global/tree.css b/toolkit/themes/gnomestripe/global/tree.css index 095f0fdb16c5..2501d41edbe5 100644 --- a/toolkit/themes/gnomestripe/global/tree.css +++ b/toolkit/themes/gnomestripe/global/tree.css @@ -302,20 +302,22 @@ treecol[dragging="true"] { color: ThreeDHighlight !important; } -treecol[insertafter="true"] { +tree[chromedir="ltr"] treecol[insertafter="true"], +tree[chromedir="rtl"] treecol[insertbefore="true"] { -moz-border-right-colors: ThreeDDarkShadow ThreeDShadow; } -treecol[insertbefore="true"] { +tree[chromedir="rtl"] treecol[insertafter="true"], +tree[chromedir="ltr"] treecol[insertbefore="true"] { -moz-border-left-colors: ThreeDDarkShadow ThreeDShadow; } treechildren::-moz-tree-column(insertbefore) { - border-left: 1px solid ThreeDShadow; + -moz-border-start: 1px solid ThreeDShadow; } treechildren::-moz-tree-column(insertafter) { - border-right: 1px solid ThreeDShadow; + -moz-border-end: 1px solid ThreeDShadow; } /* ::::: sort direction indicator ::::: */ diff --git a/toolkit/themes/pinstripe/global/tree.css b/toolkit/themes/pinstripe/global/tree.css index 999d9c1e04fc..8dbf58635fc7 100644 --- a/toolkit/themes/pinstripe/global/tree.css +++ b/toolkit/themes/pinstripe/global/tree.css @@ -269,11 +269,13 @@ treecol[dragging="true"] { color: ThreeDHighlight !important; } -treecol[insertafter="true"] { +tree[chromedir="ltr"] treecol[insertafter="true"], +tree[chromedir="rtl"] treecol[insertbefore="true"] { -moz-border-right-colors: ThreeDDarkShadow ThreeDShadow; } -treecol[insertbefore="true"] { +tree[chromedir="rtl"] treecol[insertafter="true"], +tree[chromedir="ltr"] treecol[insertbefore="true"] { -moz-border-left-colors: ThreeDDarkShadow ThreeDShadow; } diff --git a/toolkit/themes/winstripe/global/tree.css b/toolkit/themes/winstripe/global/tree.css index 46db5e61e947..2ba926a441ff 100644 --- a/toolkit/themes/winstripe/global/tree.css +++ b/toolkit/themes/winstripe/global/tree.css @@ -296,20 +296,22 @@ treecol[dragging="true"] { color: ThreeDHighlight !important; } -treecol[insertafter="true"] { +tree[chromedir="ltr"] treecol[insertafter="true"], +tree[chromedir="rtl"] treecol[insertbefore="true"] { -moz-border-right-colors: ThreeDDarkShadow ThreeDShadow; } -treecol[insertbefore="true"] { +tree[chromedir="rtl"] treecol[insertafter="true"], +tree[chromedir="ltr"] treecol[insertbefore="true"] { -moz-border-left-colors: ThreeDDarkShadow ThreeDShadow; } treechildren::-moz-tree-column(insertbefore) { - border-left: 1px solid ThreeDShadow; + -moz-border-start: 1px solid ThreeDShadow; } treechildren::-moz-tree-column(insertafter) { - border-right: 1px solid ThreeDShadow; + -moz-border-end: 1px solid ThreeDShadow; } /* ::::: sort direction indicator ::::: */