Index: mozilla/layout/xul/base/src/tree/src/nsTreeContentView.cpp =================================================================== RCS file: /cvsroot/mozilla/layout/xul/base/src/tree/src/nsTreeContentView.cpp,v retrieving revision 1.56 diff -pU10 -r1.56 mozilla/layout/xul/base/src/tree/src/nsTreeContentView.cpp --- mozilla/layout/xul/base/src/tree/src/nsTreeContentView.cpp +++ mozilla/layout/xul/base/src/tree/src/nsTreeContentView.cpp @@ -1442,39 +1442,56 @@ nsTreeContentView::UpdateParentIndexes(P Row* row = (Row*)mRows[i]; if (row->mParentIndex > aIndex) { row->mParentIndex += aCount; } } } nsIContent* nsTreeContentView::GetCell(nsIContent* aContainer, nsITreeColumn* aCol) { - const PRUnichar* colID; + nsString colID; PRInt32 colIndex; - aCol->GetIdConst(&colID); + aCol->GetId(colID); aCol->GetIndex(&colIndex); // Traverse through cells, try to find the cell by "ref" attribute or by cell // index in a row. "ref" attribute has higher priority. nsIContent* result = nsnull; PRInt32 j = 0; ChildIterator iter, last; - for (ChildIterator::Init(aContainer, &iter, &last); iter != last; ++iter) { - nsCOMPtr cell = *iter; - - if (cell->Tag() == nsXULAtoms::treecell) { - if (colID[0] != 0 && cell->AttrValueIs(kNameSpaceID_None, nsXULAtoms::ref, - nsDependentString(colID), - eCaseMatters)) { - result = cell; - break; + ChildIterator::Init(aContainer, &iter, &last); + nsCOMPtr cell; + if (!colID.IsEmpty()) { + while (iter != last) { + cell = *iter; + if (cell->Tag() == nsXULAtoms::treecell) { + if (cell->AttrValueIs(kNameSpaceID_None, nsXULAtoms::ref, + colID, + eCaseMatters)) { + result = cell; + break; + } + else if (j == colIndex) { + result = cell; + break; + } + ++j; } - else if (j == colIndex) { - result = cell; + ++iter; + } + } else { + while (iter != last) { + cell = *iter; + if (cell->Tag() == nsXULAtoms::treecell) { + if (j == colIndex) { + result = cell; + break; + } + ++j; } - j++; + ++iter; } } return result; }