Bug 364719 - "Resizers of images are positioned wrongly when page is scrolled" [p=mfenniak-moz@mathieu.fenniak.net (Mathieu Fenniak) / chris@pearce.org.nz (Chris Pearce [cpearce]) r=peterv r+sr=roc a=blocking1.9+]
This commit is contained in:
@@ -106,7 +106,7 @@ nsHTMLEditor::GetAbsolutelyPositionedSelectionContainer(nsIDOMElement **_retval)
|
||||
nsCOMPtr<nsIDOMNode> node = do_QueryInterface(element);
|
||||
nsCOMPtr<nsIDOMNode> resultNode;
|
||||
|
||||
do {
|
||||
while (!resultNode && !nsEditor::NodeIsType(node, nsEditProperty::html)) {
|
||||
res = mHTMLCSSUtils->GetComputedProperty(node, nsEditProperty::cssPosition,
|
||||
positionStr);
|
||||
if (NS_FAILED(res)) return res;
|
||||
@@ -118,8 +118,7 @@ nsHTMLEditor::GetAbsolutelyPositionedSelectionContainer(nsIDOMElement **_retval)
|
||||
if (NS_FAILED(res)) return res;
|
||||
node.swap(parentNode);
|
||||
}
|
||||
} while (!resultNode &&
|
||||
!nsEditor::NodeIsType(node, nsEditProperty::html));
|
||||
}
|
||||
|
||||
element = do_QueryInterface(resultNode );
|
||||
*_retval = element;
|
||||
@@ -315,16 +314,16 @@ nsHTMLEditor::HideGrabber()
|
||||
nsCOMPtr<nsIPresShell> ps = do_QueryReferent(mPresShellWeak);
|
||||
if (!ps) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
// get the root content node.
|
||||
nsCOMPtr<nsIDOMNode> parentNode;
|
||||
res = mGrabber->GetParentNode(getter_AddRefs(parentNode));
|
||||
NS_ENSURE_SUCCESS(res, res);
|
||||
|
||||
nsIDOMElement *rootElement = GetRoot();
|
||||
nsCOMPtr<nsIContent> parentContent = do_QueryInterface(parentNode);
|
||||
if (!parentContent) return NS_ERROR_NULL_POINTER;
|
||||
|
||||
nsCOMPtr<nsIContent> rootContent = do_QueryInterface(rootElement);
|
||||
if (!rootContent) return NS_ERROR_NULL_POINTER;
|
||||
|
||||
DeleteRefToAnonymousNode(mGrabber, rootContent, ps);
|
||||
DeleteRefToAnonymousNode(mGrabber, parentContent, ps);
|
||||
mGrabber = nsnull;
|
||||
DeleteRefToAnonymousNode(mPositioningShadow, rootContent, ps);
|
||||
DeleteRefToAnonymousNode(mPositioningShadow, parentContent, ps);
|
||||
mPositioningShadow = nsnull;
|
||||
|
||||
return NS_OK;
|
||||
@@ -346,11 +345,13 @@ nsHTMLEditor::ShowGrabberOnElement(nsIDOMElement * aElement)
|
||||
// first, let's keep track of that element...
|
||||
mAbsolutelyPositionedObject = aElement;
|
||||
|
||||
nsIDOMElement *rootElement = GetRoot();
|
||||
if (!rootElement) return NS_ERROR_NULL_POINTER;
|
||||
nsCOMPtr<nsIDOMNode> parentNode;
|
||||
res = aElement->GetParentNode(getter_AddRefs(parentNode));
|
||||
NS_ENSURE_SUCCESS(res, res);
|
||||
|
||||
res = CreateGrabber(parentNode, getter_AddRefs(mGrabber));
|
||||
NS_ENSURE_SUCCESS(res, res);
|
||||
|
||||
res = CreateGrabber(rootElement, getter_AddRefs(mGrabber));
|
||||
if (NS_FAILED(res)) return res;
|
||||
// and set its position
|
||||
return RefreshGrabber();
|
||||
}
|
||||
@@ -358,16 +359,17 @@ nsHTMLEditor::ShowGrabberOnElement(nsIDOMElement * aElement)
|
||||
nsresult
|
||||
nsHTMLEditor::StartMoving(nsIDOMElement *aHandle)
|
||||
{
|
||||
nsIDOMElement *rootElement = GetRoot();
|
||||
if (!rootElement) return NS_ERROR_NULL_POINTER;
|
||||
nsCOMPtr<nsIDOMNode> parentNode;
|
||||
nsresult res = mGrabber->GetParentNode(getter_AddRefs(parentNode));
|
||||
NS_ENSURE_SUCCESS(res, res);
|
||||
|
||||
// now, let's create the resizing shadow
|
||||
nsresult result = CreateShadow(getter_AddRefs(mPositioningShadow),
|
||||
rootElement, mAbsolutelyPositionedObject);
|
||||
if (NS_FAILED(result)) return result;
|
||||
result = SetShadowPosition(mPositioningShadow, mAbsolutelyPositionedObject,
|
||||
res = CreateShadow(getter_AddRefs(mPositioningShadow),
|
||||
parentNode, mAbsolutelyPositionedObject);
|
||||
NS_ENSURE_SUCCESS(res,res);
|
||||
res = SetShadowPosition(mPositioningShadow, mAbsolutelyPositionedObject,
|
||||
mPositionedObjectX, mPositionedObjectY);
|
||||
if (NS_FAILED(result)) return result;
|
||||
NS_ENSURE_SUCCESS(res,res);
|
||||
|
||||
// make the shadow appear
|
||||
mPositioningShadow->RemoveAttribute(NS_LITERAL_STRING("class"));
|
||||
@@ -381,7 +383,7 @@ nsHTMLEditor::StartMoving(nsIDOMElement *aHandle)
|
||||
mPositionedObjectHeight);
|
||||
|
||||
mIsMoving = PR_TRUE;
|
||||
return result;
|
||||
return res;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -421,14 +423,15 @@ nsHTMLEditor::EndMoving()
|
||||
nsCOMPtr<nsIPresShell> ps = do_QueryReferent(mPresShellWeak);
|
||||
if (!ps) return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
// get the root content node.
|
||||
nsCOMPtr<nsIDOMNode> parentNode;
|
||||
nsresult res = mGrabber->GetParentNode(getter_AddRefs(parentNode));
|
||||
NS_ENSURE_SUCCESS(res, res);
|
||||
|
||||
nsIDOMElement *rootElement = GetRoot();
|
||||
nsCOMPtr<nsIContent> parentContent( do_QueryInterface(parentNode) );
|
||||
if (!parentContent) return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIContent> rootContent( do_QueryInterface(rootElement) );
|
||||
if (!rootContent) return NS_ERROR_FAILURE;
|
||||
DeleteRefToAnonymousNode(mPositioningShadow, parentContent, ps);
|
||||
|
||||
DeleteRefToAnonymousNode(mPositioningShadow, rootContent, ps);
|
||||
mPositioningShadow = nsnull;
|
||||
}
|
||||
nsCOMPtr<nsPIDOMEventTarget> piTarget = GetPIDOMEventTarget();
|
||||
|
||||
Reference in New Issue
Block a user