NS_IMETHODIMP nsComboboxControlFrame::GetAccessible(nsIAccessible** aAccessible) { nsCOMPtr<nsIAccessibilityService> accService = do_GetService("@mozilla.org/accessibilityService;1"); if (accService) { nsCOMPtr<nsIDOMNode> node = do_QueryInterface(mContent); nsCOMPtr<nsIWeakReference> weakShell(do_GetWeakReference(PresContext()->PresShell())); return accService->CreateHTMLComboboxAccessible(node, weakShell, aAccessible); } return NS_ERROR_FAILURE; }
PRBool nsAccUtils::HasAccessibleChildren(nsINode *aNode) { if (!aNode) return PR_FALSE; nsIPresShell *presShell = nsCoreUtils::GetPresShellFor(aNode); if (!presShell) return PR_FALSE; nsIContent *content = nsCoreUtils::GetRoleContent(aNode); nsCOMPtr<nsIWeakReference> weakShell(do_GetWeakReference(presShell)); nsAccTreeWalker walker(weakShell, content, PR_FALSE); nsRefPtr<nsAccessible> accessible = walker.GetNextChild(); return accessible ? PR_TRUE : PR_FALSE; }
PRBool nsAccUtils::HasAccessibleChildren(nsIDOMNode *aNode) { if (!aNode) return PR_FALSE; nsCOMPtr<nsIContent> content(do_QueryInterface(aNode)); if (!content) return PR_FALSE; nsCOMPtr<nsIPresShell> presShell = nsCoreUtils::GetPresShellFor(aNode); if (!presShell) return PR_FALSE; nsIFrame *frame = content->GetPrimaryFrame(); if (!frame) return PR_FALSE; nsCOMPtr<nsIWeakReference> weakShell(do_GetWeakReference(presShell)); nsAccTreeWalker walker(weakShell, content, PR_FALSE); nsRefPtr<nsAccessible> accessible = walker.GetNextChild(); return accessible ? PR_TRUE : PR_FALSE; }
nsHyperTextAccessible* nsAccUtils::GetTextAccessibleFromSelection(nsISelection* aSelection) { // Get accessible from selection's focus DOM point (the DOM point where // selection is ended). nsCOMPtr<nsIDOMNode> focusDOMNode; aSelection->GetFocusNode(getter_AddRefs(focusDOMNode)); if (!focusDOMNode) return nsnull; PRInt32 focusOffset = 0; aSelection->GetFocusOffset(&focusOffset); nsCOMPtr<nsINode> focusNode(do_QueryInterface(focusDOMNode)); nsCOMPtr<nsINode> resultNode = nsCoreUtils::GetDOMNodeFromDOMPoint(focusNode, focusOffset); nsCOMPtr<nsIWeakReference> weakShell(nsCoreUtils::GetWeakShellFor(resultNode)); // Get text accessible containing the result node. nsAccessible* accessible = GetAccService()->GetAccessibleOrContainer(resultNode, weakShell); if (!accessible) { NS_NOTREACHED("No nsIAccessibleText for selection change event!"); return nsnull; } do { nsHyperTextAccessible* textAcc = accessible->AsHyperText(); if (textAcc) return textAcc; } while (accessible = accessible->GetParent()); NS_NOTREACHED("We must reach document accessible implementing nsIAccessibleText!"); return nsnull; }