mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-27 12:50:09 +00:00
fixing range dom gravity bug first exposed by bug #10231
This commit is contained in:
parent
761823a1f3
commit
f3fbfca040
@ -749,6 +749,16 @@ nsGenericDOMDataNode::RangeAdd(nsIDOMRange& aRange)
|
||||
if (nsnull == mRangeList) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
// Make sure we don't add a range that is already
|
||||
// in the list!
|
||||
PRInt32 i = mRangeList->IndexOf(&aRange);
|
||||
if (i >= 0) {
|
||||
// Range is already in the list, so there
|
||||
// is nothing to do!
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// dont need to addref - this call is made by the range object itself
|
||||
PRBool rv = mRangeList->AppendElement(&aRange);
|
||||
if (rv) return NS_OK;
|
||||
|
@ -411,30 +411,36 @@ nsresult nsRange::DoSetRange(nsIDOMNode* aStartN, PRInt32 aStartOffset,
|
||||
aStartOffset = aEndOffset;
|
||||
}
|
||||
|
||||
if (mStartParent && (mStartParent != aStartN) && (mStartParent != aEndN))
|
||||
{
|
||||
// if old start parent no longer involved, remove range from that
|
||||
// node's range list.
|
||||
RemoveFromListOf(mStartParent);
|
||||
}
|
||||
if (mEndParent && (mEndParent != aStartN) && (mEndParent != aEndN))
|
||||
{
|
||||
// if old end parent no longer involved, remove range from that
|
||||
// node's range list.
|
||||
RemoveFromListOf(mEndParent);
|
||||
}
|
||||
|
||||
|
||||
if (mStartParent.get() != aStartN)
|
||||
{
|
||||
if (mStartParent) // if it had a former start node, take it off it's list
|
||||
{
|
||||
RemoveFromListOf(mStartParent);
|
||||
}
|
||||
mStartParent = do_QueryInterface(aStartN);
|
||||
if (mStartParent) // if it has a new start node, put it on it's list
|
||||
{
|
||||
AddToListOf(mStartParent);
|
||||
AddToListOf(mStartParent); // AddToList() detects duplication for us
|
||||
}
|
||||
}
|
||||
mStartOffset = aStartOffset;
|
||||
|
||||
if (mEndParent.get() != aEndN)
|
||||
{
|
||||
if (mEndParent) // if it had a former end node, take it off it's list
|
||||
{
|
||||
RemoveFromListOf(mEndParent);
|
||||
}
|
||||
mEndParent = do_QueryInterface(aEndN);
|
||||
if (mEndParent) // if it has a new end node, put it on it's list
|
||||
{
|
||||
AddToListOf(mEndParent);
|
||||
AddToListOf(mEndParent); // AddToList() detects duplication for us
|
||||
}
|
||||
}
|
||||
mEndOffset = aEndOffset;
|
||||
|
@ -749,6 +749,16 @@ nsGenericDOMDataNode::RangeAdd(nsIDOMRange& aRange)
|
||||
if (nsnull == mRangeList) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
// Make sure we don't add a range that is already
|
||||
// in the list!
|
||||
PRInt32 i = mRangeList->IndexOf(&aRange);
|
||||
if (i >= 0) {
|
||||
// Range is already in the list, so there
|
||||
// is nothing to do!
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// dont need to addref - this call is made by the range object itself
|
||||
PRBool rv = mRangeList->AppendElement(&aRange);
|
||||
if (rv) return NS_OK;
|
||||
|
@ -411,30 +411,36 @@ nsresult nsRange::DoSetRange(nsIDOMNode* aStartN, PRInt32 aStartOffset,
|
||||
aStartOffset = aEndOffset;
|
||||
}
|
||||
|
||||
if (mStartParent && (mStartParent != aStartN) && (mStartParent != aEndN))
|
||||
{
|
||||
// if old start parent no longer involved, remove range from that
|
||||
// node's range list.
|
||||
RemoveFromListOf(mStartParent);
|
||||
}
|
||||
if (mEndParent && (mEndParent != aStartN) && (mEndParent != aEndN))
|
||||
{
|
||||
// if old end parent no longer involved, remove range from that
|
||||
// node's range list.
|
||||
RemoveFromListOf(mEndParent);
|
||||
}
|
||||
|
||||
|
||||
if (mStartParent.get() != aStartN)
|
||||
{
|
||||
if (mStartParent) // if it had a former start node, take it off it's list
|
||||
{
|
||||
RemoveFromListOf(mStartParent);
|
||||
}
|
||||
mStartParent = do_QueryInterface(aStartN);
|
||||
if (mStartParent) // if it has a new start node, put it on it's list
|
||||
{
|
||||
AddToListOf(mStartParent);
|
||||
AddToListOf(mStartParent); // AddToList() detects duplication for us
|
||||
}
|
||||
}
|
||||
mStartOffset = aStartOffset;
|
||||
|
||||
if (mEndParent.get() != aEndN)
|
||||
{
|
||||
if (mEndParent) // if it had a former end node, take it off it's list
|
||||
{
|
||||
RemoveFromListOf(mEndParent);
|
||||
}
|
||||
mEndParent = do_QueryInterface(aEndN);
|
||||
if (mEndParent) // if it has a new end node, put it on it's list
|
||||
{
|
||||
AddToListOf(mEndParent);
|
||||
AddToListOf(mEndParent); // AddToList() detects duplication for us
|
||||
}
|
||||
}
|
||||
mEndOffset = aEndOffset;
|
||||
|
Loading…
x
Reference in New Issue
Block a user