diff --git a/mozilla/accessible/public/nsIAccessibilityService.idl b/mozilla/accessible/public/nsIAccessibilityService.idl index 197fe858788..09b6e59a89f 100644 --- a/mozilla/accessible/public/nsIAccessibilityService.idl +++ b/mozilla/accessible/public/nsIAccessibilityService.idl @@ -42,7 +42,7 @@ interface nsIAccessibilityService : nsISupports nsIAccessible createHTML4ButtonAccessible(in nsISupports aFrame); nsIAccessible createHTMLAreaAccessible(in nsIWeakReference aPresShell, in nsIDOMNode aDOMNode, in nsIAccessible aAccParent); - nsIAccessible createHTMLBlockAccessible(in nsIDOMNode aNode, in nsISupports aDocument); + nsIAccessible createHTMLBlockAccessible(in nsISupports aFrame); nsIAccessible createHTMLButtonAccessible(in nsISupports aFrame); nsIAccessible createHTMLButtonAccessibleXBL(in nsIDOMNode aNode); nsIAccessible createHTMLCheckboxAccessible(in nsISupports aFrame); diff --git a/mozilla/accessible/src/base/nsAccessibilityService.cpp b/mozilla/accessible/src/base/nsAccessibilityService.cpp index 8f747155455..5f7763e477e 100644 --- a/mozilla/accessible/src/base/nsAccessibilityService.cpp +++ b/mozilla/accessible/src/base/nsAccessibilityService.cpp @@ -433,23 +433,17 @@ nsAccessibilityService::CreateHTMLAreaAccessible(nsIWeakReference *aShell, nsIDO return NS_OK; } -NS_IMETHODIMP -nsAccessibilityService::CreateHTMLBlockAccessible(nsIDOMNode* aDOMNode, nsISupports* aDocument, nsIAccessible **_retval) +NS_IMETHODIMP +nsAccessibilityService::CreateHTMLBlockAccessible(nsISupports *aFrame, nsIAccessible **_retval) { - nsCOMPtr document (do_QueryInterface(aDocument)); - if (!document) - return NS_ERROR_FAILURE; + nsIFrame* frame; + nsCOMPtr node; + nsCOMPtr weakShell; + nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node)); + if (NS_FAILED(rv)) + return rv; -#ifdef DEBUG - PRInt32 shells = document->GetNumberOfShells(); - NS_ASSERTION(shells > 0,"Error no shells!"); -#endif - - nsCOMPtr tempShell; - document->GetShellAt(0, getter_AddRefs(tempShell)); - nsCOMPtr weakShell = do_GetWeakReference(tempShell); - - *_retval = new nsAccessible(aDOMNode, weakShell); + *_retval = new nsHTMLBlockAccessible(node, weakShell); if (! *_retval) return NS_ERROR_OUT_OF_MEMORY; diff --git a/mozilla/accessible/src/html/nsHTMLTextAccessible.cpp b/mozilla/accessible/src/html/nsHTMLTextAccessible.cpp index cfa5e87a19f..bb5d5414f0f 100644 --- a/mozilla/accessible/src/html/nsHTMLTextAccessible.cpp +++ b/mozilla/accessible/src/html/nsHTMLTextAccessible.cpp @@ -45,13 +45,13 @@ nsTextAccessible(aDomNode, aShell) { } -NS_IMETHODIMP nsHTMLTextAccessible::GetAccName(nsAString& _retval) +NS_IMETHODIMP nsHTMLTextAccessible::GetAccName(nsAString& aName) { nsAutoString accName; if (NS_FAILED(mDOMNode->GetNodeValue(accName))) return NS_ERROR_FAILURE; accName.CompressWhitespace(); - _retval = accName; + aName = accName; return NS_OK; } @@ -60,15 +60,40 @@ nsLeafAccessible(aDomNode, aShell) { } -NS_IMETHODIMP nsHTMLHRAccessible::GetAccRole(PRUint32 *_retval) +NS_IMETHODIMP nsHTMLHRAccessible::GetAccRole(PRUint32 *aRole) { - *_retval = ROLE_SEPARATOR; + *aRole = ROLE_SEPARATOR; return NS_OK; } -NS_IMETHODIMP nsHTMLHRAccessible::GetAccState(PRUint32 *_retval) +NS_IMETHODIMP nsHTMLHRAccessible::GetAccState(PRUint32 *aState) { - nsLeafAccessible::GetAccState(_retval); - *_retval &= ~STATE_FOCUSABLE; + nsLeafAccessible::GetAccState(aState); + *aState &= ~STATE_FOCUSABLE; + return NS_OK; +} + +NS_IMPL_ISUPPORTS_INHERITED0(nsHTMLBlockAccessible, nsBlockAccessible) + +nsHTMLBlockAccessible::nsHTMLBlockAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell): +nsBlockAccessible(aDomNode, aShell) +{ +} + +NS_IMETHODIMP nsHTMLBlockAccessible::GetAccName(nsAString& aName) +{ + return nsAccessible::GetAccName(aName); +} + +NS_IMETHODIMP nsHTMLBlockAccessible::GetAccRole(PRUint32 *aRole) +{ + *aRole = ROLE_TEXT; + return NS_OK; +} + +NS_IMETHODIMP nsHTMLBlockAccessible::GetAccState(PRUint32 *aState) +{ + nsAccessible::GetAccState(aState); + *aState &= ~STATE_FOCUSABLE; return NS_OK; } diff --git a/mozilla/accessible/src/html/nsHTMLTextAccessible.h b/mozilla/accessible/src/html/nsHTMLTextAccessible.h index 0c3505b623d..19a3dd27cc8 100644 --- a/mozilla/accessible/src/html/nsHTMLTextAccessible.h +++ b/mozilla/accessible/src/html/nsHTMLTextAccessible.h @@ -61,4 +61,15 @@ public: NS_IMETHOD GetAccState(PRUint32 *_retval); }; +class nsHTMLBlockAccessible : public nsBlockAccessible +{ + NS_DECL_ISUPPORTS_INHERITED + +public: + nsHTMLBlockAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell); + NS_IMETHOD GetAccName(nsAString& _retval); + NS_IMETHOD GetAccRole(PRUint32 *_retval); + NS_IMETHOD GetAccState(PRUint32 *_retval); +}; + #endif diff --git a/mozilla/layout/generic/nsBlockFrame.cpp b/mozilla/layout/generic/nsBlockFrame.cpp index 8338d1def82..c71fe0f6788 100644 --- a/mozilla/layout/generic/nsBlockFrame.cpp +++ b/mozilla/layout/generic/nsBlockFrame.cpp @@ -75,6 +75,10 @@ #include "nsGUIEvent.h" #include "nsLayoutErrors.h" #include "nsAutoPtr.h" +#ifdef MOZ_ACCESSIBILITY_ATK +#include "nsIAccessibilityService.h" +#include "nsIServiceManager.h" +#endif #ifdef IBMBIDI #include "nsBidiPresUtils.h" @@ -6687,3 +6691,16 @@ nsBlockFrame::GetDepth() const return depth; } #endif + +#ifdef MOZ_ACCESSIBILITY_ATK +NS_IMETHODIMP nsBlockFrame::GetAccessible(nsIAccessible** aAccessible) +{ + nsCOMPtr accService = do_GetService("@mozilla.org/accessibilityService;1"); + + if (accService) { + return accService->CreateHTMLBlockAccessible(NS_STATIC_CAST(nsIFrame*, this), aAccessible); + } + + return NS_ERROR_FAILURE; +} +#endif diff --git a/mozilla/layout/generic/nsBlockFrame.h b/mozilla/layout/generic/nsBlockFrame.h index 1ec5a912e0f..afcdc70d916 100644 --- a/mozilla/layout/generic/nsBlockFrame.h +++ b/mozilla/layout/generic/nsBlockFrame.h @@ -205,6 +205,9 @@ public: void UndoSplitPlaceholders(nsBlockReflowState& aState, nsIFrame* aLastPlaceholder); +#ifdef MOZ_ACCESSIBILITY_ATK + NS_IMETHOD GetAccessible(nsIAccessible** aAccessible); +#endif protected: nsBlockFrame(); virtual ~nsBlockFrame(); diff --git a/mozilla/layout/generic/nsTextFrame.cpp b/mozilla/layout/generic/nsTextFrame.cpp index 67e6880a076..b30a3f3d956 100644 --- a/mozilla/layout/generic/nsTextFrame.cpp +++ b/mozilla/layout/generic/nsTextFrame.cpp @@ -808,6 +808,7 @@ protected: #ifdef ACCESSIBILITY NS_IMETHODIMP nsTextFrame::GetAccessible(nsIAccessible** aAccessible) { +#ifndef MOZ_ACCESSIBILITY_ATK if (mRect.width > 0 || mRect.height > 0) { nsCOMPtr accService = do_GetService("@mozilla.org/accessibilityService;1"); @@ -816,6 +817,7 @@ NS_IMETHODIMP nsTextFrame::GetAccessible(nsIAccessible** aAccessible) return accService->CreateHTMLTextAccessible(NS_STATIC_CAST(nsIFrame*, this), aAccessible); } } +#endif return NS_ERROR_FAILURE; } #endif diff --git a/mozilla/layout/html/base/src/nsBlockFrame.cpp b/mozilla/layout/html/base/src/nsBlockFrame.cpp index 8338d1def82..c71fe0f6788 100644 --- a/mozilla/layout/html/base/src/nsBlockFrame.cpp +++ b/mozilla/layout/html/base/src/nsBlockFrame.cpp @@ -75,6 +75,10 @@ #include "nsGUIEvent.h" #include "nsLayoutErrors.h" #include "nsAutoPtr.h" +#ifdef MOZ_ACCESSIBILITY_ATK +#include "nsIAccessibilityService.h" +#include "nsIServiceManager.h" +#endif #ifdef IBMBIDI #include "nsBidiPresUtils.h" @@ -6687,3 +6691,16 @@ nsBlockFrame::GetDepth() const return depth; } #endif + +#ifdef MOZ_ACCESSIBILITY_ATK +NS_IMETHODIMP nsBlockFrame::GetAccessible(nsIAccessible** aAccessible) +{ + nsCOMPtr accService = do_GetService("@mozilla.org/accessibilityService;1"); + + if (accService) { + return accService->CreateHTMLBlockAccessible(NS_STATIC_CAST(nsIFrame*, this), aAccessible); + } + + return NS_ERROR_FAILURE; +} +#endif diff --git a/mozilla/layout/html/base/src/nsBlockFrame.h b/mozilla/layout/html/base/src/nsBlockFrame.h index 1ec5a912e0f..afcdc70d916 100644 --- a/mozilla/layout/html/base/src/nsBlockFrame.h +++ b/mozilla/layout/html/base/src/nsBlockFrame.h @@ -205,6 +205,9 @@ public: void UndoSplitPlaceholders(nsBlockReflowState& aState, nsIFrame* aLastPlaceholder); +#ifdef MOZ_ACCESSIBILITY_ATK + NS_IMETHOD GetAccessible(nsIAccessible** aAccessible); +#endif protected: nsBlockFrame(); virtual ~nsBlockFrame(); diff --git a/mozilla/layout/html/base/src/nsTextFrame.cpp b/mozilla/layout/html/base/src/nsTextFrame.cpp index 67e6880a076..b30a3f3d956 100644 --- a/mozilla/layout/html/base/src/nsTextFrame.cpp +++ b/mozilla/layout/html/base/src/nsTextFrame.cpp @@ -808,6 +808,7 @@ protected: #ifdef ACCESSIBILITY NS_IMETHODIMP nsTextFrame::GetAccessible(nsIAccessible** aAccessible) { +#ifndef MOZ_ACCESSIBILITY_ATK if (mRect.width > 0 || mRect.height > 0) { nsCOMPtr accService = do_GetService("@mozilla.org/accessibilityService;1"); @@ -816,6 +817,7 @@ NS_IMETHODIMP nsTextFrame::GetAccessible(nsIAccessible** aAccessible) return accService->CreateHTMLTextAccessible(NS_STATIC_CAST(nsIFrame*, this), aAccessible); } } +#endif return NS_ERROR_FAILURE; } #endif