nsresult nsWebBrowserFind::SetRangeAroundDocument(nsIDOMRange* aSearchRange, nsIDOMRange* aStartPt, nsIDOMRange* aEndPt, nsIDOMDocument* aDoc) { nsCOMPtr<nsIDOMNode> bodyNode; nsresult rv = GetRootNode(aDoc, getter_AddRefs(bodyNode)); nsCOMPtr<nsIContent> bodyContent (do_QueryInterface(bodyNode)); NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_ARG_POINTER(bodyContent); uint32_t childCount = bodyContent->GetChildCount(); aSearchRange->SetStart(bodyNode, 0); aSearchRange->SetEnd(bodyNode, childCount); if (mFindBackwards) { aStartPt->SetStart(bodyNode, childCount); aStartPt->SetEnd(bodyNode, childCount); aEndPt->SetStart(bodyNode, 0); aEndPt->SetEnd(bodyNode, 0); } else { aStartPt->SetStart(bodyNode, 0); aStartPt->SetEnd(bodyNode, 0); aEndPt->SetStart(bodyNode, childCount); aEndPt->SetEnd(bodyNode, childCount); } return NS_OK; }
NS_IMETHODIMP nsHTMLEditor::HideInlineTableEditingUI() { mInlineEditedCell = nsnull; RemoveMouseClickListener(mAddColumnBeforeButton); RemoveMouseClickListener(mRemoveColumnButton); RemoveMouseClickListener(mAddColumnAfterButton); RemoveMouseClickListener(mAddRowBeforeButton); RemoveMouseClickListener(mRemoveRowButton); RemoveMouseClickListener(mAddRowAfterButton); // get the presshell's document observer interface. nsCOMPtr<nsIPresShell> ps; GetPresShell(getter_AddRefs(ps)); // We allow the pres shell to be null; when it is, we presume there // are no document observers to notify, but we still want to // UnbindFromTree. // get the root content node. nsIDOMElement *bodyElement = GetRoot(); nsCOMPtr<nsIContent> bodyContent( do_QueryInterface(bodyElement) ); NS_ENSURE_TRUE(bodyContent, NS_ERROR_FAILURE); DeleteRefToAnonymousNode(mAddColumnBeforeButton, bodyContent, ps); mAddColumnBeforeButton = nsnull; DeleteRefToAnonymousNode(mRemoveColumnButton, bodyContent, ps); mRemoveColumnButton = nsnull; DeleteRefToAnonymousNode(mAddColumnAfterButton, bodyContent, ps); mAddColumnAfterButton = nsnull; DeleteRefToAnonymousNode(mAddRowBeforeButton, bodyContent, ps); mAddRowBeforeButton = nsnull; DeleteRefToAnonymousNode(mRemoveRowButton, bodyContent, ps); mRemoveRowButton = nsnull; DeleteRefToAnonymousNode(mAddRowAfterButton, bodyContent, ps); mAddRowAfterButton = nsnull; return NS_OK; }
// Set the range to go from the end of the current selection to the // end of the document (forward), or beginning to beginning (reverse). // or around the whole document if there's no selection. nsresult nsWebBrowserFind::GetSearchLimits(nsIDOMRange* aSearchRange, nsIDOMRange* aStartPt, nsIDOMRange* aEndPt, nsIDOMDocument* aDoc, nsISelection* aSel, bool aWrap) { NS_ENSURE_ARG_POINTER(aSel); // There is a selection. int32_t count = -1; nsresult rv = aSel->GetRangeCount(&count); NS_ENSURE_SUCCESS(rv, rv); if (count < 1) return SetRangeAroundDocument(aSearchRange, aStartPt, aEndPt, aDoc); // Need bodyNode, for the start/end of the document nsCOMPtr<nsIDOMNode> bodyNode; rv = GetRootNode(aDoc, getter_AddRefs(bodyNode)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIContent> bodyContent (do_QueryInterface(bodyNode)); NS_ENSURE_ARG_POINTER(bodyContent); uint32_t childCount = bodyContent->GetChildCount(); // There are four possible range endpoints we might use: // DocumentStart, SelectionStart, SelectionEnd, DocumentEnd. nsCOMPtr<nsIDOMRange> range; nsCOMPtr<nsIDOMNode> node; int32_t offset; // Forward, not wrapping: SelEnd to DocEnd if (!mFindBackwards && !aWrap) { // This isn't quite right, since the selection's ranges aren't // necessarily in order; but they usually will be. aSel->GetRangeAt(count-1, getter_AddRefs(range)); if (!range) return NS_ERROR_UNEXPECTED; range->GetEndContainer(getter_AddRefs(node)); if (!node) return NS_ERROR_UNEXPECTED; range->GetEndOffset(&offset); aSearchRange->SetStart(node, offset); aSearchRange->SetEnd(bodyNode, childCount); aStartPt->SetStart(node, offset); aStartPt->SetEnd(node, offset); aEndPt->SetStart(bodyNode, childCount); aEndPt->SetEnd(bodyNode, childCount); } // Backward, not wrapping: DocStart to SelStart else if (mFindBackwards && !aWrap) { aSel->GetRangeAt(0, getter_AddRefs(range)); if (!range) return NS_ERROR_UNEXPECTED; range->GetStartContainer(getter_AddRefs(node)); if (!node) return NS_ERROR_UNEXPECTED; range->GetStartOffset(&offset); aSearchRange->SetStart(bodyNode, 0); aSearchRange->SetEnd(bodyNode, childCount); aStartPt->SetStart(node, offset); aStartPt->SetEnd(node, offset); aEndPt->SetStart(bodyNode, 0); aEndPt->SetEnd(bodyNode, 0); } // Forward, wrapping: DocStart to SelEnd else if (!mFindBackwards && aWrap) { aSel->GetRangeAt(count-1, getter_AddRefs(range)); if (!range) return NS_ERROR_UNEXPECTED; range->GetEndContainer(getter_AddRefs(node)); if (!node) return NS_ERROR_UNEXPECTED; range->GetEndOffset(&offset); aSearchRange->SetStart(bodyNode, 0); aSearchRange->SetEnd(bodyNode, childCount); aStartPt->SetStart(bodyNode, 0); aStartPt->SetEnd(bodyNode, 0); aEndPt->SetStart(node, offset); aEndPt->SetEnd(node, offset); } // Backward, wrapping: SelStart to DocEnd else if (mFindBackwards && aWrap) { aSel->GetRangeAt(0, getter_AddRefs(range)); if (!range) return NS_ERROR_UNEXPECTED; range->GetStartContainer(getter_AddRefs(node)); if (!node) return NS_ERROR_UNEXPECTED; range->GetStartOffset(&offset); aSearchRange->SetStart(bodyNode, 0); aSearchRange->SetEnd(bodyNode, childCount); aStartPt->SetStart(bodyNode, childCount); aStartPt->SetEnd(bodyNode, childCount); aEndPt->SetStart(node, offset); aEndPt->SetEnd(node, offset); } return NS_OK; }
NS_IMETHODIMP nsHTMLEditor::HideResizers(void) { if (!mResizedObject) return NS_OK; // get the presshell's document observer interface. nsCOMPtr<nsIPresShell> ps = do_QueryReferent(mPresShellWeak); if (!ps) return NS_ERROR_NOT_INITIALIZED; // get the root content node. nsIDOMElement *bodyElement = GetRoot(); nsCOMPtr<nsIContent> bodyContent( do_QueryInterface(bodyElement) ); if (!bodyContent) return NS_ERROR_FAILURE; NS_NAMED_LITERAL_STRING(mousedown, "mousedown"); RemoveListenerAndDeleteRef(mousedown, mMouseListenerP, PR_TRUE, mTopLeftHandle, bodyContent, ps); mTopLeftHandle = nsnull; RemoveListenerAndDeleteRef(mousedown, mMouseListenerP, PR_TRUE, mTopHandle, bodyContent, ps); mTopHandle = nsnull; RemoveListenerAndDeleteRef(mousedown, mMouseListenerP, PR_TRUE, mTopRightHandle, bodyContent, ps); mTopRightHandle = nsnull; RemoveListenerAndDeleteRef(mousedown, mMouseListenerP, PR_TRUE, mLeftHandle, bodyContent, ps); mLeftHandle = nsnull; RemoveListenerAndDeleteRef(mousedown, mMouseListenerP, PR_TRUE, mRightHandle, bodyContent, ps); mRightHandle = nsnull; RemoveListenerAndDeleteRef(mousedown, mMouseListenerP, PR_TRUE, mBottomLeftHandle, bodyContent, ps); mBottomLeftHandle = nsnull; RemoveListenerAndDeleteRef(mousedown, mMouseListenerP, PR_TRUE, mBottomHandle, bodyContent, ps); mBottomHandle = nsnull; RemoveListenerAndDeleteRef(mousedown, mMouseListenerP, PR_TRUE, mBottomRightHandle, bodyContent, ps); mBottomRightHandle = nsnull; RemoveListenerAndDeleteRef(mousedown, mMouseListenerP, PR_TRUE, mResizingShadow, bodyContent, ps); mResizingShadow = nsnull; RemoveListenerAndDeleteRef(mousedown, mMouseListenerP, PR_TRUE, mResizingInfo, bodyContent, ps); mResizingInfo = nsnull; // don't forget to remove the listeners ! nsCOMPtr<nsIDOMEventReceiver> erP = GetDOMEventReceiver(); nsresult res; if (erP && mMouseMotionListenerP) { res = erP->RemoveEventListener(NS_LITERAL_STRING("mousemove"), mMouseMotionListenerP, PR_TRUE); NS_ASSERTION(NS_SUCCEEDED(res), "failed to remove mouse motion listener"); } mMouseMotionListenerP = nsnull; nsCOMPtr<nsIDOMDocument> domDoc; GetDocument(getter_AddRefs(domDoc)); nsCOMPtr<nsIDocument> doc = do_QueryInterface(domDoc); if (!doc) { return NS_ERROR_NULL_POINTER; } nsIScriptGlobalObject *global = doc->GetScriptGlobalObject(); if (!global) { return NS_ERROR_NULL_POINTER; } nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(global); if (target && mResizeEventListenerP) { res = target->RemoveEventListener(NS_LITERAL_STRING("resize"), mResizeEventListenerP, PR_FALSE); NS_ASSERTION(NS_SUCCEEDED(res), "failed to remove resize event listener"); } mResizeEventListenerP = nsnull; mResizedObject->RemoveAttribute(NS_LITERAL_STRING("_moz_resizing")); mResizedObject = nsnull; return NS_OK; }