void nsHTMLEditor::RemoveMouseClickListener(nsIDOMElement * aElement) { nsCOMPtr<nsIDOMEventTarget> evtTarget(do_QueryInterface(aElement)); if (evtTarget) { evtTarget->RemoveEventListener(NS_LITERAL_STRING("click"), mEventListener, PR_TRUE); } }
void nsHTMLEditor::AddMouseClickListener(nsIDOMElement * aElement) { nsCOMPtr<nsIDOMEventTarget> evtTarget(do_QueryInterface(aElement)); if (evtTarget) { evtTarget->AddEventListener(NS_LITERAL_STRING("click"), mEventListener, true); } }
nsresult nsXULTooltipListener::DestroyTooltip() { nsCOMPtr<nsIDOMMouseListener> kungFuDeathGrip(this); nsCOMPtr<nsIContent> currentTooltip = do_QueryReferent(mCurrentTooltip); if (currentTooltip) { // clear out the tooltip node on the document nsCOMPtr<nsIDocument> doc = currentTooltip->GetDocument(); if (doc) { nsCOMPtr<nsIDOMXULDocument> xulDoc(do_QueryInterface(doc)); if (xulDoc) xulDoc->SetTooltipNode(nsnull); // remove the mousedown and keydown listener from document nsCOMPtr<nsIDOMEventTarget> evtTarget(do_QueryInterface(doc)); evtTarget->RemoveEventListener(NS_LITERAL_STRING("DOMMouseScroll"), (nsIDOMMouseListener*)this, PR_TRUE); evtTarget->RemoveEventListener(NS_LITERAL_STRING("mousedown"), (nsIDOMMouseListener*)this, PR_TRUE); evtTarget->RemoveEventListener(NS_LITERAL_STRING("mouseup"), (nsIDOMMouseListener*)this, PR_TRUE); evtTarget->RemoveEventListener(NS_LITERAL_STRING("keydown"), (nsIDOMMouseListener*)this, PR_TRUE); } // remove the popuphidden listener from tooltip nsCOMPtr<nsIDOMEventTarget> evtTarget(do_QueryInterface(currentTooltip)); // release tooltip before removing listener to prevent our destructor from // being called recursively (bug 120863) mCurrentTooltip = nsnull; evtTarget->RemoveEventListener(NS_LITERAL_STRING("popuphiding"), (nsIDOMMouseListener*)this, PR_FALSE); } // kill any ongoing timers KillTooltipTimer(); mSourceNode = nsnull; #ifdef MOZ_XUL mLastTreeCol = nsnull; #endif if (mAutoHideTimer) { mAutoHideTimer->Cancel(); mAutoHideTimer = nsnull; } return NS_OK; }
nsresult nsXULTooltipListener::RemoveTooltipSupport(nsIContent* aNode) { if (!aNode) return NS_ERROR_NULL_POINTER; nsCOMPtr<nsIDOMEventTarget> evtTarget(do_QueryInterface(aNode)); evtTarget->RemoveEventListener(NS_LITERAL_STRING("mouseout"), (nsIDOMMouseListener*)this, PR_FALSE); evtTarget->RemoveEventListener(NS_LITERAL_STRING("mousemove"), (nsIDOMMouseListener*)this, PR_FALSE); return NS_OK; }
nsresult nsHTMLEditor::CreateResizer(nsIDOMElement ** aReturn, PRInt16 aLocation, nsIDOMNode * aParentNode) { nsresult res = CreateAnonymousElement(NS_LITERAL_STRING("span"), aParentNode, NS_LITERAL_STRING("mozResizer"), PR_FALSE, aReturn); if (NS_FAILED(res)) return res; if (!*aReturn) return NS_ERROR_FAILURE; // add the mouse listener so we can detect a click on a resizer nsCOMPtr<nsIDOMEventTarget> evtTarget(do_QueryInterface(*aReturn)); evtTarget->AddEventListener(NS_LITERAL_STRING("mousedown"), mMouseListenerP, PR_TRUE); nsAutoString locationStr; switch (aLocation) { case nsIHTMLObjectResizer::eTopLeft: locationStr = kTopLeft; break; case nsIHTMLObjectResizer::eTop: locationStr = kTop; break; case nsIHTMLObjectResizer::eTopRight: locationStr = kTopRight; break; case nsIHTMLObjectResizer::eLeft: locationStr = kLeft; break; case nsIHTMLObjectResizer::eRight: locationStr = kRight; break; case nsIHTMLObjectResizer::eBottomLeft: locationStr = kBottomLeft; break; case nsIHTMLObjectResizer::eBottom: locationStr = kBottom; break; case nsIHTMLObjectResizer::eBottomRight: locationStr = kBottomRight; break; } res = (*aReturn)->SetAttribute(NS_LITERAL_STRING("anonlocation"), locationStr); return res; }
nsresult nsXULTooltipListener::ShowTooltip() { nsCOMPtr<nsIContent> sourceNode = do_QueryReferent(mSourceNode); // get the tooltip content designated for the target node nsCOMPtr<nsIContent> tooltipNode; GetTooltipFor(sourceNode, getter_AddRefs(tooltipNode)); if (!tooltipNode || sourceNode == tooltipNode) return NS_ERROR_FAILURE; // the target node doesn't need a tooltip // set the node in the document that triggered the tooltip and show it nsCOMPtr<nsIDOMXULDocument> xulDoc(do_QueryInterface(tooltipNode->GetDocument())); if (xulDoc) { // Make sure the target node is still attached to some document. // It might have been deleted. if (sourceNode->GetDocument()) { #ifdef MOZ_XUL if (!mIsSourceTree) { mLastTreeRow = -1; mLastTreeCol = nsnull; } #endif nsCOMPtr<nsIDOMNode> targetNode = do_QueryReferent(mTargetNode); xulDoc->SetTooltipNode(targetNode); mCurrentTooltip = do_GetWeakReference(tooltipNode); LaunchTooltip(); mTargetNode = nsnull; nsCOMPtr<nsIContent> currentTooltip = do_QueryReferent(mCurrentTooltip); if (!currentTooltip) return NS_OK; // at this point, |currentTooltip| holds the content node of // the tooltip. If there is an attribute on the popup telling us // not to create the auto-hide timer, don't. if (!currentTooltip->AttrValueIs(kNameSpaceID_None, nsGkAtoms::noautohide, nsGkAtoms::_true, eCaseMatters)) CreateAutoHideTimer(); // listen for popuphidden on the tooltip node, so that we can // be sure DestroyPopup is called even if someone else closes the tooltip nsCOMPtr<nsIDOMEventTarget> evtTarget(do_QueryInterface(currentTooltip)); evtTarget->AddEventListener(NS_LITERAL_STRING("popuphiding"), (nsIDOMMouseListener*)this, PR_FALSE); // listen for mousedown, mouseup, keydown, and DOMMouseScroll events at document level nsIDocument* doc = sourceNode->GetDocument(); if (doc) { evtTarget = do_QueryInterface(doc); evtTarget->AddEventListener(NS_LITERAL_STRING("DOMMouseScroll"), (nsIDOMMouseListener*)this, PR_TRUE); evtTarget->AddEventListener(NS_LITERAL_STRING("mousedown"), (nsIDOMMouseListener*)this, PR_TRUE); evtTarget->AddEventListener(NS_LITERAL_STRING("mouseup"), (nsIDOMMouseListener*)this, PR_TRUE); evtTarget->AddEventListener(NS_LITERAL_STRING("keydown"), (nsIDOMMouseListener*)this, PR_TRUE); } mSourceNode = nsnull; } } return NS_OK; }