// // EnsureHandlers // // Lazily load the XBL handlers. Overridden to handle being attached // to a particular element rather than the document // nsresult nsXBLWindowKeyHandler::EnsureHandlers(PRBool *aIsEditor) { nsCOMPtr<nsIDOMElement> el = GetElement(); NS_ENSURE_STATE(!mWeakPtrForElement || el); if (el) { // We are actually a XUL <keyset>. if (aIsEditor) *aIsEditor = PR_FALSE; if (mHandler) return NS_OK; nsCOMPtr<nsIContent> content(do_QueryInterface(el)); BuildHandlerChain(content, &mHandler); } else { // We are an XBL file of handlers. if (!sXBLSpecialDocInfo) sXBLSpecialDocInfo = new nsXBLSpecialDocInfo(); if (!sXBLSpecialDocInfo) { if (aIsEditor) { *aIsEditor = PR_FALSE; } return NS_ERROR_OUT_OF_MEMORY; } sXBLSpecialDocInfo->LoadDocInfo(); // Now determine which handlers we should be using. PRBool isEditor = IsEditor(); if (isEditor) { sXBLSpecialDocInfo->GetAllHandlers("editor", &mHandler, &mUserHandler); } else { sXBLSpecialDocInfo->GetAllHandlers("browser", &mHandler, &mUserHandler); } if (aIsEditor) *aIsEditor = isEditor; } return NS_OK; }
// // EnsureHandlers // // Lazily load the XBL handlers. Overridden to handle being attached // to a particular element rather than the document // nsresult nsXBLWindowKeyHandler::EnsureHandlers(PRBool *aIsEditor) { nsCOMPtr<nsIDOMElement> el = GetElement(); NS_ENSURE_STATE(!mBoxObjectForElement || el); if (el) { // We are actually a XUL <keyset>. if (aIsEditor) *aIsEditor = PR_FALSE; if (mHandler) return NS_OK; nsCOMPtr<nsIContent> content(do_QueryInterface(el)); BuildHandlerChain(content, &mHandler); } else // We are an XBL file of handlers. nsXBLWindowHandler::EnsureHandlers(aIsEditor); return NS_OK; }