From 58178a3dc70dccbcfe3b122c10699984e7e67a68 Mon Sep 17 00:00:00 2001 From: "aaronl%netscape.com" Date: Wed, 9 Jan 2002 10:02:29 +0000 Subject: [PATCH] Active accessibility fixes. Bug 118633 - null frame checks, bug 118761 - support STATE_SYSTEM_INVISIBLE, bug 118759 - support statusbar, bug 114109 - support dropmarker, bug 118858 and bug 118020 - text nodes shouldn't get focusable state. r's=jgaunt, sr's=hewitt, waterson git-svn-id: svn://10.0.0.236/trunk@111654 18797224-902f-48f8-a5cc-f745e15eee43 --- .../public/nsIAccessibilityService.idl | 2 + .../accessible/src/base/accessible.properties | 2 + .../src/base/nsAccessibilityService.cpp | 45 ++++- mozilla/accessible/src/base/nsAccessible.cpp | 2 +- .../src/base/nsBaseWidgetAccessible.cpp | 9 +- .../src/base/nsSelectAccessible.cpp | 8 +- .../src/html/nsHTMLFormControlAccessible.cpp | 4 +- .../src/html/nsHTMLSelectAccessible.cpp | 10 +- .../src/html/nsHTMLTableAccessible.cpp | 7 + .../src/html/nsHTMLTableAccessible.h | 1 + .../src/html/nsHTMLTextAccessible.h | 2 +- .../src/xul/nsXULColorPickerAccessible.cpp | 2 +- .../src/xul/nsXULColorPickerAccessible.h | 4 +- .../src/xul/nsXULFormControlAccessible.cpp | 176 +++++++++++++++++- .../src/xul/nsXULFormControlAccessible.h | 33 +++- .../resources/content/bindings/general.xml | 22 +++ .../content/bindings/toolbarbutton.xml | 11 ++ 17 files changed, 314 insertions(+), 26 deletions(-) diff --git a/mozilla/accessible/public/nsIAccessibilityService.idl b/mozilla/accessible/public/nsIAccessibilityService.idl index a83cdca8b87..f29649077b2 100644 --- a/mozilla/accessible/public/nsIAccessibilityService.idl +++ b/mozilla/accessible/public/nsIAccessibilityService.idl @@ -57,6 +57,7 @@ interface nsIAccessibilityService : nsISupports nsIAccessible createXULColorPickerAccessible(in nsIDOMNode aNode); nsIAccessible createXULColorPickerTileAccessible(in nsIDOMNode aNode); nsIAccessible createXULComboboxAccessible(in nsIDOMNode aNode); + nsIAccessible createXULDropmarkerAccessible(in nsIDOMNode aNode); nsIAccessible createXULGroupboxAccessible(in nsIDOMNode aNode); nsIAccessible createXULImageAccessible(in nsIDOMNode aNode); nsIAccessible createXULListboxAccessible(in nsIDOMNode aNode); @@ -65,6 +66,7 @@ interface nsIAccessibilityService : nsISupports nsIAccessible createXULMenupopupAccessible(in nsIDOMNode aNode); nsIAccessible createXULMenuSeparatorAccessible(in nsIDOMNode aNode); nsIAccessible createXULProgressMeterAccessible(in nsIDOMNode aNode); + nsIAccessible createXULStatusBarAccessible(in nsIDOMNode aNode); nsIAccessible createXULRadioButtonAccessible(in nsIDOMNode aNode); nsIAccessible createXULRadioGroupAccessible(in nsIDOMNode aNode); nsIAccessible createXULSelectOptionAccessible(in nsIDOMNode aNode); diff --git a/mozilla/accessible/src/base/accessible.properties b/mozilla/accessible/src/base/accessible.properties index 23d7df5e126..a4d47e31314 100644 --- a/mozilla/accessible/src/base/accessible.properties +++ b/mozilla/accessible/src/base/accessible.properties @@ -3,3 +3,5 @@ press = Press check = Check uncheck = Uncheck select = Select +open = Open +close = Close \ No newline at end of file diff --git a/mozilla/accessible/src/base/nsAccessibilityService.cpp b/mozilla/accessible/src/base/nsAccessibilityService.cpp index c031d304b21..9b4a7ac57ae 100644 --- a/mozilla/accessible/src/base/nsAccessibilityService.cpp +++ b/mozilla/accessible/src/base/nsAccessibilityService.cpp @@ -709,6 +709,24 @@ nsAccessibilityService::CreateXULComboboxAccessible(nsIDOMNode *aNode, nsIAccess return NS_OK; } +NS_IMETHODIMP +nsAccessibilityService::CreateXULDropmarkerAccessible(nsIDOMNode *aNode, nsIAccessible **_retval) +{ +#ifdef MOZ_XUL + nsCOMPtr weakShell; + GetShellFromNode(aNode, getter_AddRefs(weakShell)); + + *_retval = new nsXULDropmarkerAccessible(aNode, weakShell); + if (! *_retval) + return NS_ERROR_OUT_OF_MEMORY; + + NS_ADDREF(*_retval); +#else + *_retval = nsnull; +#endif // MOZ_XUL + return NS_OK; +} + NS_IMETHODIMP nsAccessibilityService::CreateXULGroupboxAccessible(nsIDOMNode *aNode, nsIAccessible **_retval) { @@ -938,6 +956,24 @@ nsAccessibilityService::CreateXULSelectOptionAccessible(nsIDOMNode *aNode, nsIAc return NS_OK; } +NS_IMETHODIMP +nsAccessibilityService::CreateXULStatusBarAccessible(nsIDOMNode *aNode, nsIAccessible **_retval) +{ +#ifdef MOZ_XUL + nsCOMPtr weakShell; + GetShellFromNode(aNode, getter_AddRefs(weakShell)); + + *_retval = new nsXULStatusBarAccessible(aNode, weakShell); + if (! *_retval) + return NS_ERROR_OUT_OF_MEMORY; + + NS_ADDREF(*_retval); +#else + *_retval = nsnull; +#endif // MOZ_XUL + return NS_OK; +} + NS_IMETHODIMP nsAccessibilityService::CreateXULTextAccessible(nsIDOMNode *aNode, nsIAccessible **_retval) { @@ -1049,8 +1085,13 @@ NS_IMETHODIMP nsAccessibilityService::GetAccessibleFor(nsIDOMNode *aNode, // Please leave this in for now, it's a convenient debugging method nsAutoString name; aNode->GetLocalName(name); - if (name.Equals(NS_LITERAL_STRING("menulist"))) - printf("## aaronl debugging\n"); + if (name.Equals(NS_LITERAL_STRING("dropmarker"))) + printf("## aaronl debugging tag name\n"); + + nsAutoString className; + xulElement->GetAttribute(NS_LITERAL_STRING("class"), className); + if (className.Equals(NS_LITERAL_STRING("toolbarbutton-menubutton-dropmarker"))) + printf("## aaronl debugging attribute\n"); #endif nsCOMPtr accProv(do_QueryInterface(aNode)); if (accProv) { diff --git a/mozilla/accessible/src/base/nsAccessible.cpp b/mozilla/accessible/src/base/nsAccessible.cpp index d8e5aefb5b4..ede6fb98901 100644 --- a/mozilla/accessible/src/base/nsAccessible.cpp +++ b/mozilla/accessible/src/base/nsAccessible.cpp @@ -701,7 +701,7 @@ NS_IMETHODIMP nsAccessible::GetAccState(PRUint32 *aAccState) // Check if STATE_OFFSCREEN bitflag should be turned on for this object if (!IsEntirelyVisible()) - *aAccState |= STATE_OFFSCREEN; + *aAccState |= STATE_OFFSCREEN | STATE_INVISIBLE; return rv; } diff --git a/mozilla/accessible/src/base/nsBaseWidgetAccessible.cpp b/mozilla/accessible/src/base/nsBaseWidgetAccessible.cpp index d986fd8fc1a..654dabaa6d2 100644 --- a/mozilla/accessible/src/base/nsBaseWidgetAccessible.cpp +++ b/mozilla/accessible/src/base/nsBaseWidgetAccessible.cpp @@ -221,8 +221,8 @@ NS_IMETHODIMP nsLinkableAccessible::GetAccState(PRUint32 *_retval) nsCOMPtr context; shell->GetPresContext(getter_AddRefs(context)); nsCOMPtr content(do_QueryInterface(mDOMNode)); - nsIFrame *frame; - if (content && NS_SUCCEEDED(shell->GetPrimaryFrameFor(content, &frame))) { + nsIFrame *frame = nsnull; + if (content && NS_SUCCEEDED(shell->GetPrimaryFrameFor(content, &frame)) && frame) { nsCOMPtr selCon; frame->GetSelectionController(context,getter_AddRefs(selCon)); if (selCon) { @@ -238,7 +238,7 @@ NS_IMETHODIMP nsLinkableAccessible::GetAccState(PRUint32 *_retval) } } - if (mIsALinkCached) { + if (IsALink()) { // Make sure we also include all the states of the parent link, such as focusable, focused, etc. PRUint32 role; GetAccRole(&role); @@ -251,9 +251,8 @@ NS_IMETHODIMP nsLinkableAccessible::GetAccState(PRUint32 *_retval) *_retval |= orState; } } - } - // Focused? Do we implement that here or up the chain? + return NS_OK; } diff --git a/mozilla/accessible/src/base/nsSelectAccessible.cpp b/mozilla/accessible/src/base/nsSelectAccessible.cpp index 1653617a817..1bdd8e05d83 100644 --- a/mozilla/accessible/src/base/nsSelectAccessible.cpp +++ b/mozilla/accessible/src/base/nsSelectAccessible.cpp @@ -535,9 +535,9 @@ NS_IMETHODIMP nsComboboxButtonAccessible::GetAccActionName(PRUint8 index, nsAWri return NS_ERROR_FAILURE; comboFrame->IsDroppedDown(&isOpen); if (isOpen) - _retval = NS_LITERAL_STRING("Close"); + _retval = NS_LITERAL_STRING("close"); else - _retval = NS_LITERAL_STRING("Open"); + _retval = NS_LITERAL_STRING("open"); return NS_OK; } @@ -663,6 +663,10 @@ void nsComboboxWindowAccessible::GetBounds(nsRect& aBounds, nsIFrame** aBounding nsIFrame* frame = nsnull; nsCOMPtr content(do_QueryInterface(child)); shell->GetPrimaryFrameFor(content, &frame); + if (!frame) { + *aBoundingFrame = nsnull; + return; + } #ifdef DEBUG if (! nsAccessible::IsCorrectFrameType(frame, nsLayoutAtoms::blockFrame)) return; diff --git a/mozilla/accessible/src/html/nsHTMLFormControlAccessible.cpp b/mozilla/accessible/src/html/nsHTMLFormControlAccessible.cpp index deb534beab3..93e4646dbe9 100644 --- a/mozilla/accessible/src/html/nsHTMLFormControlAccessible.cpp +++ b/mozilla/accessible/src/html/nsHTMLFormControlAccessible.cpp @@ -338,8 +338,8 @@ NS_IMETHODIMP nsHTMLTextFieldAccessible::GetAccState(PRUint32 *_retval) nsCOMPtr context; shell->GetPresContext(getter_AddRefs(context)); nsCOMPtr content(do_QueryInterface(mDOMNode)); - nsIFrame *frame; - if (content && NS_SUCCEEDED(shell->GetPrimaryFrameFor(content, &frame))) { + nsIFrame *frame = nsnull; + if (content && NS_SUCCEEDED(shell->GetPrimaryFrameFor(content, &frame)) && frame) { nsCOMPtr selCon; frame->GetSelectionController(context,getter_AddRefs(selCon)); if (selCon) { diff --git a/mozilla/accessible/src/html/nsHTMLSelectAccessible.cpp b/mozilla/accessible/src/html/nsHTMLSelectAccessible.cpp index 0be4b1a43c8..b2316db7058 100644 --- a/mozilla/accessible/src/html/nsHTMLSelectAccessible.cpp +++ b/mozilla/accessible/src/html/nsHTMLSelectAccessible.cpp @@ -236,15 +236,13 @@ nsresult nsHTMLSelectOptionAccessible::GetFocusedOptionNode(nsIWeakReference *aP nsCOMPtr content(do_QueryInterface(aListNode)); shell->GetPrimaryFrameFor(content, &frame); - nsresult rv; - nsCOMPtr listFrame(do_QueryInterface(frame, &rv)); - if (NS_FAILED(rv)) - return rv; // How can list content not have a list frame? - NS_ASSERTION(listFrame, "We don't have a list frame, but rv returned a success code."); + nsCOMPtr listFrame(do_QueryInterface(frame)); + if (!listFrame) + return NS_ERROR_FAILURE; // Get what's focused by asking frame for "selected item". PRInt32 focusedOptionIndex = 0; - rv = listFrame->GetSelectedIndex(&focusedOptionIndex); + nsresult rv = listFrame->GetSelectedIndex(&focusedOptionIndex); nsCOMPtr options; diff --git a/mozilla/accessible/src/html/nsHTMLTableAccessible.cpp b/mozilla/accessible/src/html/nsHTMLTableAccessible.cpp index 9aa210f6e56..681301a51f8 100644 --- a/mozilla/accessible/src/html/nsHTMLTableAccessible.cpp +++ b/mozilla/accessible/src/html/nsHTMLTableAccessible.cpp @@ -54,6 +54,13 @@ NS_IMETHODIMP nsHTMLTableCellAccessible::GetAccRole(PRUint32 *aResult) return NS_OK; } +NS_IMETHODIMP nsHTMLTableCellAccessible::GetAccState(PRUint32 *aResult) +{ + nsAccessible::GetAccState(aResult); + *aResult &= ~STATE_FOCUSABLE; // Inherit all states except focusable state since table cells cannot be focused + return NS_OK; +} + nsHTMLTableAccessible::nsHTMLTableAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell): nsBlockAccessible(aDomNode, aShell) { diff --git a/mozilla/accessible/src/html/nsHTMLTableAccessible.h b/mozilla/accessible/src/html/nsHTMLTableAccessible.h index 9075b6cdefd..8d84f6fcb57 100644 --- a/mozilla/accessible/src/html/nsHTMLTableAccessible.h +++ b/mozilla/accessible/src/html/nsHTMLTableAccessible.h @@ -48,6 +48,7 @@ class nsHTMLTableCellAccessible : public nsBlockAccessible public: nsHTMLTableCellAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell); NS_IMETHOD GetAccRole(PRUint32 *aResult); + NS_IMETHOD GetAccState(PRUint32 *aResult); }; diff --git a/mozilla/accessible/src/html/nsHTMLTextAccessible.h b/mozilla/accessible/src/html/nsHTMLTextAccessible.h index cbd8ce226da..ed3afbab413 100644 --- a/mozilla/accessible/src/html/nsHTMLTextAccessible.h +++ b/mozilla/accessible/src/html/nsHTMLTextAccessible.h @@ -48,7 +48,7 @@ class nsHTMLTextAccessible : public nsTextAccessible public: nsHTMLTextAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell); - NS_IMETHOD GetAccName(nsAWritableString& _retval); + NS_IMETHOD GetAccName(nsAWritableString& _retval); }; #endif diff --git a/mozilla/accessible/src/xul/nsXULColorPickerAccessible.cpp b/mozilla/accessible/src/xul/nsXULColorPickerAccessible.cpp index 6e8f1ce99bf..088fe0ca5bb 100644 --- a/mozilla/accessible/src/xul/nsXULColorPickerAccessible.cpp +++ b/mozilla/accessible/src/xul/nsXULColorPickerAccessible.cpp @@ -53,7 +53,7 @@ * Default Constructor */ nsXULColorPickerTileAccessible::nsXULColorPickerTileAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell): -nsXULButtonAccessible(aNode, aShell) +nsFormControlAccessible(aNode, aShell) { } diff --git a/mozilla/accessible/src/xul/nsXULColorPickerAccessible.h b/mozilla/accessible/src/xul/nsXULColorPickerAccessible.h index 0b59a4afb2b..c0d04e077ce 100644 --- a/mozilla/accessible/src/xul/nsXULColorPickerAccessible.h +++ b/mozilla/accessible/src/xul/nsXULColorPickerAccessible.h @@ -41,9 +41,9 @@ #define _nsXULColorPickerAccessible_H_ // NOTE: alphabetically ordered -#include "nsXULFormControlAccessible.h" +#include "nsFormControlAccessible.h" -class nsXULColorPickerTileAccessible : public nsXULButtonAccessible +class nsXULColorPickerTileAccessible : public nsFormControlAccessible { public: nsXULColorPickerTileAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell); diff --git a/mozilla/accessible/src/xul/nsXULFormControlAccessible.cpp b/mozilla/accessible/src/xul/nsXULFormControlAccessible.cpp index 9e8bd88746d..c6065f33a42 100644 --- a/mozilla/accessible/src/xul/nsXULFormControlAccessible.cpp +++ b/mozilla/accessible/src/xul/nsXULFormControlAccessible.cpp @@ -50,6 +50,8 @@ #include "nsReadableUtils.h" #include "nsString.h" #include "nsXULFormControlAccessible.h" +#include "nsIAccessibilityService.h" +#include "nsIServiceManager.h" /** * XUL Button: can contain arbitrary HTML content @@ -58,11 +60,18 @@ /** * Default Constructor */ + +// Don't inherit from nsFormControlAccessible - it doesn't allow children and a button can have a dropmarker child nsXULButtonAccessible::nsXULButtonAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell): -nsFormControlAccessible(aNode, aShell) +nsAccessible(aNode, aShell), mAccService(do_GetService("@mozilla.org/accessibilityService;1")) { } +NS_IMETHODIMP nsXULButtonAccessible::GetAccName(nsAWritableString& aResult) +{ + return GetXULAccName(aResult); +} + /** * Only one actions available */ @@ -116,8 +125,17 @@ NS_IMETHODIMP nsXULButtonAccessible::GetAccRole(PRUint32 *_retval) NS_IMETHODIMP nsXULButtonAccessible::GetAccState(PRUint32 *_retval) { // get focus and disable status from base class - nsFormControlAccessible::GetAccState(_retval); - *_retval |= STATE_FOCUSABLE; + nsAccessible::GetAccState(_retval); + + PRBool disabled = PR_FALSE; + nsCOMPtr xulFormElement(do_QueryInterface(mDOMNode)); + if (xulFormElement) { + xulFormElement->GetDisabled(&disabled); + if (disabled) + *_retval |= STATE_UNAVAILABLE; + else + *_retval |= STATE_FOCUSABLE; + } // Buttons can be checked -- they simply appear pressed in rather than checked nsCOMPtr xulButtonElement(do_QueryInterface(mDOMNode)); @@ -136,6 +154,132 @@ NS_IMETHODIMP nsXULButtonAccessible::GetAccState(PRUint32 *_retval) return NS_OK; } +/** + * Perhaps 1 child - if there's a + */ +NS_IMETHODIMP nsXULButtonAccessible::GetAccFirstChild(nsIAccessible **aResult) +{ + *aResult = nsnull; + + nsCOMPtr testAccessible; + nsAccessible::GetAccLastChild(getter_AddRefs(testAccessible)); + + // If the anonymous tree walker can find accessible children, and the last one is a push button, + // then use it as the only accessible child -- because this is the scenario where we have a dropmarker child + + if (testAccessible) { + PRUint32 role; + if (NS_SUCCEEDED(testAccessible->GetAccRole(&role)) && role == ROLE_PUSHBUTTON) { + *aResult = testAccessible; + NS_ADDREF(*aResult); + } + } + + return NS_OK; +} + +NS_IMETHODIMP nsXULButtonAccessible::GetAccLastChild(nsIAccessible **aResult) +{ + return GetAccFirstChild(aResult); +} + +NS_IMETHODIMP nsXULButtonAccessible::GetAccChildCount(PRInt32 *aResult) +{ + *aResult = 0; + + nsCOMPtr accessible; + GetAccFirstChild(getter_AddRefs(accessible)); + if (accessible) + *aResult = 1; + + return NS_OK; +} + +/** + * XUL Dropmarker: can contain arbitrary HTML content + */ + +/** + * Default Constructor + */ +nsXULDropmarkerAccessible::nsXULDropmarkerAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell): +nsFormControlAccessible(aNode, aShell) +{ +} + +/** + * Only one actions available + */ +NS_IMETHODIMP nsXULDropmarkerAccessible::GetAccNumActions(PRUint8 *aResult) +{ + *aResult = eSingle_Action; + return NS_OK;; +} + +PRBool nsXULDropmarkerAccessible::DropmarkerOpen(PRBool aToggleOpen) +{ + PRBool isOpen = PR_FALSE; + + nsCOMPtr parentButtonNode; + mDOMNode->GetParentNode(getter_AddRefs(parentButtonNode)); + nsCOMPtr parentButtonElement(do_QueryInterface(parentButtonNode)); + + if (parentButtonElement) { + parentButtonElement->GetOpen(&isOpen); + if (aToggleOpen) + parentButtonElement->SetOpen(!isOpen); + } + + return isOpen; +} + +/** + * Return the name of our only action + */ +NS_IMETHODIMP nsXULDropmarkerAccessible::GetAccActionName(PRUint8 index, nsAWritableString& aResult) +{ + if (index == eAction_Click) { + if (DropmarkerOpen(PR_FALSE)) + aResult = NS_LITERAL_STRING("close"); + else + aResult = NS_LITERAL_STRING("open"); + return NS_OK; + } + + return NS_ERROR_INVALID_ARG; +} + +/** + * Tell the Dropmarker to do it's action + */ +NS_IMETHODIMP nsXULDropmarkerAccessible::AccDoAction(PRUint8 index) +{ + if (index == eAction_Click) { + DropmarkerOpen(PR_TRUE); // Reverse the open attribute + return NS_OK; + } + return NS_ERROR_INVALID_ARG; +} + +/** + * We are a pushbutton + */ +NS_IMETHODIMP nsXULDropmarkerAccessible::GetAccRole(PRUint32 *aResult) +{ + *aResult = ROLE_PUSHBUTTON; + return NS_OK; +} + +NS_IMETHODIMP nsXULDropmarkerAccessible::GetAccState(PRUint32 *aResult) +{ + *aResult = 0; + + if (DropmarkerOpen(PR_FALSE)) + *aResult = STATE_PRESSED; + + return NS_OK; +} + /** * XUL checkbox */ @@ -378,3 +522,29 @@ nsFormControlAccessible(aNode, aShell) { } +/** + * XUL StatusBar: can contain arbitrary HTML content + */ + +/** + * Default Constructor + */ +nsXULStatusBarAccessible::nsXULStatusBarAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell): +nsFormControlAccessible(aNode, aShell) +{ +} + +/** + * We are a statusbar + */ +NS_IMETHODIMP nsXULStatusBarAccessible::GetAccRole(PRUint32 *_retval) +{ + *_retval = ROLE_STATUSBAR; + return NS_OK; +} + +NS_IMETHODIMP nsXULStatusBarAccessible::GetAccState(PRUint32 *_retval) +{ + *_retval = 0; // no special state flags for status bar + return NS_OK; +} diff --git a/mozilla/accessible/src/xul/nsXULFormControlAccessible.h b/mozilla/accessible/src/xul/nsXULFormControlAccessible.h index bc948f72ab9..f3c2b4d3882 100644 --- a/mozilla/accessible/src/xul/nsXULFormControlAccessible.h +++ b/mozilla/accessible/src/xul/nsXULFormControlAccessible.h @@ -45,15 +45,24 @@ #include "nsFormControlAccessible.h" #include "nsHTMLFormControlAccessible.h" -class nsXULButtonAccessible : public nsFormControlAccessible +class nsXULButtonAccessible : public nsAccessible +// Don't inherit from nsFormControlAccessible - it doesn't allow children and a button can have a dropmarker child { public: nsXULButtonAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell); + NS_IMETHOD GetAccName(nsAWritableString& aResult); NS_IMETHOD GetAccRole(PRUint32 *_retval); NS_IMETHOD GetAccState(PRUint32 *_retval); NS_IMETHOD GetAccNumActions(PRUint8 *_retval); NS_IMETHOD GetAccActionName(PRUint8 index, nsAWritableString& _retval); NS_IMETHOD AccDoAction(PRUint8 index); + NS_IMETHOD GetAccFirstChild(nsIAccessible **_retval); + NS_IMETHOD GetAccLastChild(nsIAccessible **_retval); + NS_IMETHOD GetAccChildCount(PRInt32 *_retval); + +private: + nsCOMPtr mAccService; + }; class nsXULCheckboxAccessible : public nsFormControlAccessible @@ -67,6 +76,20 @@ public: NS_IMETHOD GetAccState(PRUint32 *_retval); }; +class nsXULDropmarkerAccessible : public nsFormControlAccessible +{ +public: + nsXULDropmarkerAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell); + NS_IMETHOD GetAccRole(PRUint32 *_retval); + NS_IMETHOD GetAccState(PRUint32 *_retval); + NS_IMETHOD GetAccNumActions(PRUint8 *_retval); + NS_IMETHOD GetAccActionName(PRUint8 index, nsAWritableString& _retval); + NS_IMETHOD AccDoAction(PRUint8 index); + +private: + PRBool DropmarkerOpen(PRBool aToggleOpen); +}; + class nsXULGroupboxAccessible : public nsAccessible { public: @@ -101,5 +124,13 @@ public: nsXULRadioGroupAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell); }; +class nsXULStatusBarAccessible : public nsFormControlAccessible +{ +public: + nsXULStatusBarAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell); + NS_IMETHOD GetAccRole(PRUint32 *_retval); + NS_IMETHOD GetAccState(PRUint32 *_retval); +}; + #endif diff --git a/mozilla/xpfe/global/resources/content/bindings/general.xml b/mozilla/xpfe/global/resources/content/bindings/general.xml index ae4392c8eb4..bd3f9608372 100644 --- a/mozilla/xpfe/global/resources/content/bindings/general.xml +++ b/mozilla/xpfe/global/resources/content/bindings/general.xml @@ -235,6 +235,17 @@ + + + + + + + + + + + + + + + + diff --git a/mozilla/xpfe/global/resources/content/bindings/toolbarbutton.xml b/mozilla/xpfe/global/resources/content/bindings/toolbarbutton.xml index cc37955e656..3f240ed3d41 100644 --- a/mozilla/xpfe/global/resources/content/bindings/toolbarbutton.xml +++ b/mozilla/xpfe/global/resources/content/bindings/toolbarbutton.xml @@ -58,6 +58,17 @@ + + + + + + + + \ No newline at end of file