зеркало из https://github.com/mozilla/gecko-dev.git
Fixing 42109 (again) - I missed a case on my first attempt. r=disttsc@bart.nl.
This commit is contained in:
Родитель
36d784df08
Коммит
e29926f20a
|
@ -2424,9 +2424,12 @@ nsXULElement::RemoveChildAt(PRInt32 aIndex, PRBool aNotify)
|
|||
nsCOMPtr<nsIAtom> tag;
|
||||
nsCOMPtr<nsIDOMXULTreeElement> treeElement;
|
||||
nsCOMPtr<nsITreeBoxObject> treeBox;
|
||||
PRInt32 newSelectIndex = -1;
|
||||
PRBool fireSelectionHandler = PR_FALSE;
|
||||
|
||||
// -1 = do nothing, -2 = null out current item
|
||||
// anything else = index to re-set as current
|
||||
PRInt32 newCurrentIndex = -1;
|
||||
|
||||
oldKid->GetTag(*getter_AddRefs(tag));
|
||||
if (tag && (tag.get() == nsXULAtoms::treechildren || tag.get() == nsXULAtoms::treeitem ||
|
||||
tag.get() == nsXULAtoms::treecell)) {
|
||||
|
@ -2472,10 +2475,13 @@ nsXULElement::RemoveChildAt(PRInt32 aIndex, PRBool aNotify)
|
|||
treeBox = do_QueryInterface(box);
|
||||
if (treeBox) {
|
||||
nsCOMPtr<nsIDOMElement> domElem = do_QueryInterface(parentKid);
|
||||
if (domElem) {
|
||||
treeBox->GetIndexOfItem(domElem, &newSelectIndex);
|
||||
}
|
||||
if (domElem)
|
||||
treeBox->GetIndexOfItem(domElem, &newCurrentIndex);
|
||||
}
|
||||
|
||||
// If any of this fails, we'll just set the current item to null
|
||||
if (newCurrentIndex == -1)
|
||||
newCurrentIndex = -2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2488,18 +2494,20 @@ nsXULElement::RemoveChildAt(PRInt32 aIndex, PRBool aNotify)
|
|||
doc->ContentRemoved(NS_STATIC_CAST(nsIStyledContent*, this), oldKid, aIndex);
|
||||
}
|
||||
|
||||
if (newSelectIndex != -1) {
|
||||
if (newCurrentIndex == -2)
|
||||
treeElement->SetCurrentItem(nsnull);
|
||||
else if (newCurrentIndex > -1) {
|
||||
// Make sure the index is still valid
|
||||
PRInt32 treeRows;
|
||||
treeBox->GetRowCount(&treeRows);
|
||||
if (treeRows > 0) {
|
||||
newSelectIndex = PR_MIN((treeRows - 1), newSelectIndex);
|
||||
nsCOMPtr<nsIDOMElement> newSelectItem;
|
||||
treeBox->GetItemAtIndex(newSelectIndex, getter_AddRefs(newSelectItem));
|
||||
if (newSelectItem) {
|
||||
nsCOMPtr<nsIDOMXULElement> xulSelItem = do_QueryInterface(newSelectItem);
|
||||
if (xulSelItem)
|
||||
treeElement->SetCurrentItem(xulSelItem);
|
||||
newCurrentIndex = PR_MIN((treeRows - 1), newCurrentIndex);
|
||||
nsCOMPtr<nsIDOMElement> newCurrentItem;
|
||||
treeBox->GetItemAtIndex(newCurrentIndex, getter_AddRefs(newCurrentItem));
|
||||
if (newCurrentItem) {
|
||||
nsCOMPtr<nsIDOMXULElement> xulCurItem = do_QueryInterface(newCurrentItem);
|
||||
if (xulCurItem)
|
||||
treeElement->SetCurrentItem(xulCurItem);
|
||||
}
|
||||
} else {
|
||||
treeElement->SetCurrentItem(nsnull);
|
||||
|
|
|
@ -2424,9 +2424,12 @@ nsXULElement::RemoveChildAt(PRInt32 aIndex, PRBool aNotify)
|
|||
nsCOMPtr<nsIAtom> tag;
|
||||
nsCOMPtr<nsIDOMXULTreeElement> treeElement;
|
||||
nsCOMPtr<nsITreeBoxObject> treeBox;
|
||||
PRInt32 newSelectIndex = -1;
|
||||
PRBool fireSelectionHandler = PR_FALSE;
|
||||
|
||||
// -1 = do nothing, -2 = null out current item
|
||||
// anything else = index to re-set as current
|
||||
PRInt32 newCurrentIndex = -1;
|
||||
|
||||
oldKid->GetTag(*getter_AddRefs(tag));
|
||||
if (tag && (tag.get() == nsXULAtoms::treechildren || tag.get() == nsXULAtoms::treeitem ||
|
||||
tag.get() == nsXULAtoms::treecell)) {
|
||||
|
@ -2472,10 +2475,13 @@ nsXULElement::RemoveChildAt(PRInt32 aIndex, PRBool aNotify)
|
|||
treeBox = do_QueryInterface(box);
|
||||
if (treeBox) {
|
||||
nsCOMPtr<nsIDOMElement> domElem = do_QueryInterface(parentKid);
|
||||
if (domElem) {
|
||||
treeBox->GetIndexOfItem(domElem, &newSelectIndex);
|
||||
}
|
||||
if (domElem)
|
||||
treeBox->GetIndexOfItem(domElem, &newCurrentIndex);
|
||||
}
|
||||
|
||||
// If any of this fails, we'll just set the current item to null
|
||||
if (newCurrentIndex == -1)
|
||||
newCurrentIndex = -2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2488,18 +2494,20 @@ nsXULElement::RemoveChildAt(PRInt32 aIndex, PRBool aNotify)
|
|||
doc->ContentRemoved(NS_STATIC_CAST(nsIStyledContent*, this), oldKid, aIndex);
|
||||
}
|
||||
|
||||
if (newSelectIndex != -1) {
|
||||
if (newCurrentIndex == -2)
|
||||
treeElement->SetCurrentItem(nsnull);
|
||||
else if (newCurrentIndex > -1) {
|
||||
// Make sure the index is still valid
|
||||
PRInt32 treeRows;
|
||||
treeBox->GetRowCount(&treeRows);
|
||||
if (treeRows > 0) {
|
||||
newSelectIndex = PR_MIN((treeRows - 1), newSelectIndex);
|
||||
nsCOMPtr<nsIDOMElement> newSelectItem;
|
||||
treeBox->GetItemAtIndex(newSelectIndex, getter_AddRefs(newSelectItem));
|
||||
if (newSelectItem) {
|
||||
nsCOMPtr<nsIDOMXULElement> xulSelItem = do_QueryInterface(newSelectItem);
|
||||
if (xulSelItem)
|
||||
treeElement->SetCurrentItem(xulSelItem);
|
||||
newCurrentIndex = PR_MIN((treeRows - 1), newCurrentIndex);
|
||||
nsCOMPtr<nsIDOMElement> newCurrentItem;
|
||||
treeBox->GetItemAtIndex(newCurrentIndex, getter_AddRefs(newCurrentItem));
|
||||
if (newCurrentItem) {
|
||||
nsCOMPtr<nsIDOMXULElement> xulCurItem = do_QueryInterface(newCurrentItem);
|
||||
if (xulCurItem)
|
||||
treeElement->SetCurrentItem(xulCurItem);
|
||||
}
|
||||
} else {
|
||||
treeElement->SetCurrentItem(nsnull);
|
||||
|
|
Загрузка…
Ссылка в новой задаче