diff --git a/mozilla/accessible/public/nsIAccessible.idl b/mozilla/accessible/public/nsIAccessible.idl index a0ae1f5444e..bf9bca4f297 100644 --- a/mozilla/accessible/public/nsIAccessible.idl +++ b/mozilla/accessible/public/nsIAccessible.idl @@ -80,6 +80,8 @@ interface nsIAccessible : nsISupports // Used by Accessible implementation to save data and speed up accessibility tree walking [noscript] void CacheOptimizations(in nsIAccessible aParent, in PRInt32 aSiblingIndex, in nsIDOMNodeList aSiblingList); + [noscript] void handleEvent(in unsigned long aEvent, in nsIAccessible aTarget, in voidPtr aData); + // MSAA State flags - used for bitfield. More than 1 allowed. const unsigned long STATE_UNAVAILABLE = 0x00000001; // Disabled, maps to opposite of Java ENABLED, Gnome/ATK SENSITIVE? const unsigned long STATE_SELECTED = 0x00000002; diff --git a/mozilla/accessible/public/nsIAccessibleEventListener.idl b/mozilla/accessible/public/nsIAccessibleEventListener.idl index 82761288439..0a2d927d968 100644 --- a/mozilla/accessible/public/nsIAccessibleEventListener.idl +++ b/mozilla/accessible/public/nsIAccessibleEventListener.idl @@ -25,15 +25,6 @@ #include "nsISupports.idl" #include "nsIAccessible.idl" -%{ C++ -// extra event data (currently used by ATK) -struct AccessibleEventData { - PRUint32 aUnused; -}; -%} - -[ptr] native AccessibleEventData(AccessibleEventData); - [scriptable, uuid(BEE49E7D-9D06-49bf-8984-1694C697D74F)] interface nsIAccessibleEventListener : nsISupports { @@ -94,6 +85,6 @@ interface nsIAccessibleEventListener : nsISupports const unsigned long EVENT_ATK_TABLE_COLUMN_REORDER = 0x0116; [noscript] - void handleEvent(in unsigned long aEvent, in nsIAccessible aTarget, in AccessibleEventData aData); + void handleEvent(in unsigned long aEvent, in nsIAccessible aTarget, in voidPtr aData); }; diff --git a/mozilla/accessible/src/base/nsAccessible.cpp b/mozilla/accessible/src/base/nsAccessible.cpp index 31fada80d06..4ec39e7c630 100644 --- a/mozilla/accessible/src/base/nsAccessible.cpp +++ b/mozilla/accessible/src/base/nsAccessible.cpp @@ -1615,3 +1615,10 @@ NS_IMETHODIMP nsAccessible::GetXULAccName(nsAString& _retval) _retval.Assign(label); return NS_OK; } + +NS_IMETHODIMP nsAccessible::HandleEvent(PRUint32 aEvent, nsIAccessible *aTarget, void * aData) +{ + nsCOMPtr parent; + GetAccParent(getter_AddRefs(parent)); + return parent ? parent->HandleEvent(aEvent, aTarget, aData) : NS_ERROR_NOT_IMPLEMENTED; +} diff --git a/mozilla/accessible/src/base/nsAccessible.h b/mozilla/accessible/src/base/nsAccessible.h index 712ecd0395e..5973b6bafbd 100644 --- a/mozilla/accessible/src/base/nsAccessible.h +++ b/mozilla/accessible/src/base/nsAccessible.h @@ -110,6 +110,7 @@ protected: NS_IMETHOD AppendStringWithSpaces(nsAString *aFlatString, const nsAString& textEquivalent); NS_IMETHOD GetFocusedNode(nsIDOMNode **aFocusedNode); NS_IMETHOD CacheOptimizations(nsIAccessible *aParent, PRInt32 aSiblingIndex, nsIDOMNodeList *aSiblingList); + NS_IMETHOD HandleEvent(PRUint32 aEvent, nsIAccessible *aTarget, void * aData); // helper method to verify frames static PRBool IsCorrectFrameType(nsIFrame* aFrame, nsIAtom* aAtom); static nsresult GetFullKeyName(const nsAString& aModifierName, const nsAString& aKeyName, nsAString& aStringOut); diff --git a/mozilla/accessible/src/base/nsCaretAccessible.cpp b/mozilla/accessible/src/base/nsCaretAccessible.cpp index 8fa764fed35..920bd7930f4 100644 --- a/mozilla/accessible/src/base/nsCaretAccessible.cpp +++ b/mozilla/accessible/src/base/nsCaretAccessible.cpp @@ -193,7 +193,7 @@ NS_IMETHODIMP nsCaretAccessible::NotifySelectionChanged(nsIDOMDocument *aDoc, ns if (isCollapsed) { PRInt32 caretOffset; domSel->GetFocusOffset(&caretOffset); - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_ATK_TEXT_CARET_MOVE, accessible, (AccessibleEventData*)&caretOffset); + mListener->HandleEvent(nsIAccessibleEventListener::EVENT_ATK_TEXT_CARET_MOVE, accessible, &caretOffset); } else mListener->HandleEvent(nsIAccessibleEventListener::EVENT_ATK_TEXT_SELECTION_CHANGE, accessible, nsnull); diff --git a/mozilla/accessible/src/base/nsGenericAccessible.cpp b/mozilla/accessible/src/base/nsGenericAccessible.cpp index 33592e3a42c..935ba67154f 100644 --- a/mozilla/accessible/src/base/nsGenericAccessible.cpp +++ b/mozilla/accessible/src/base/nsGenericAccessible.cpp @@ -248,12 +248,20 @@ NS_IMETHODIMP nsGenericAccessible::GetAccExtState(PRUint32 *_retval) return NS_ERROR_NOT_IMPLEMENTED; } +/* nsIDOMNode accGetDOMNode (); */ NS_IMETHODIMP nsGenericAccessible::AccGetDOMNode(nsIDOMNode **_retval) { return NS_ERROR_NOT_IMPLEMENTED; } +/* [noscript] void CacheOptimizations (in nsIAccessible aParent, in PRInt32 aSiblingIndex, in nsIDOMNodeList aSiblingList); */ NS_IMETHODIMP nsGenericAccessible::CacheOptimizations(nsIAccessible *aParent, PRInt32 aSiblingIndex, nsIDOMNodeList *aSiblingList) { return NS_ERROR_NOT_IMPLEMENTED; } + +/* [noscript] void handleEvent (in unsigned long aEvent, in nsIAccessible aTarget, in voidPtr aData); */ +NS_IMETHODIMP nsGenericAccessible::HandleEvent(PRUint32 aEvent, nsIAccessible *aTarget, void * aData) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} diff --git a/mozilla/accessible/src/base/nsRootAccessible.cpp b/mozilla/accessible/src/base/nsRootAccessible.cpp index 0a558aa1fdf..34301c67c08 100644 --- a/mozilla/accessible/src/base/nsRootAccessible.cpp +++ b/mozilla/accessible/src/base/nsRootAccessible.cpp @@ -262,8 +262,7 @@ void nsRootAccessible::ScrollTimerCallback(nsITimer *aTimer, void *aClosure) // We only want to fire accessibilty scroll event when scrolling stops or pauses // Therefore, we wait for no scroll events to occur between 2 ticks of this timer // That indicates a pause in scrolling, so we fire the accessibilty scroll event - if (rootAcc->mListener) - rootAcc->mListener->HandleEvent(nsIAccessibleEventListener::EVENT_SCROLLINGEND, rootAcc, nsnull); + rootAcc->HandleEvent(nsIAccessibleEventListener::EVENT_SCROLLINGEND, rootAcc, nsnull); rootAcc->mScrollPositionChangedTicks = 0; rootAcc->mScrollWatchTimer->Cancel(); rootAcc->mScrollWatchTimer = nsnull; @@ -435,7 +434,7 @@ NS_IMETHODIMP nsRootAccessible::GetCaretAccessible(nsIAccessibleCaret **aCaretAc void nsRootAccessible::FireAccessibleFocusEvent(nsIAccessible *focusAccessible, nsIDOMNode *focusNode) { if (focusAccessible && focusNode && gLastFocusedNode != focusNode) { - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_FOCUS, focusAccessible, nsnull); + HandleEvent(nsIAccessibleEventListener::EVENT_FOCUS, focusAccessible, nsnull); NS_IF_RELEASE(gLastFocusedNode); PRUint32 role = ROLE_NOTHING; focusAccessible->GetAccRole(&role); @@ -505,7 +504,7 @@ NS_IMETHODIMP nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent) // tree event if (treeItemAccessible && (eventType.EqualsIgnoreCase("DOMMenuItemActive") || eventType.EqualsIgnoreCase("select"))) { - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_FOCUS, treeItemAccessible, nsnull); + HandleEvent(nsIAccessibleEventListener::EVENT_FOCUS, treeItemAccessible, nsnull); return NS_OK; } @@ -525,27 +524,27 @@ NS_IMETHODIMP nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent) FireAccessibleFocusEvent(accessible, targetNode); } else if (eventType.EqualsIgnoreCase("ListitemStateChange")) { - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, accessible, nsnull); + HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, accessible, nsnull); FireAccessibleFocusEvent(accessible, optionTargetNode); } else if (eventType.EqualsIgnoreCase("CheckboxStateChange")) { - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, accessible, nsnull); + HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, accessible, nsnull); } else if (eventType.EqualsIgnoreCase("RadioStateChange") ) { // first the XUL radio buttons if (targetNode && NS_SUCCEEDED(mAccService->GetAccessibleFor(targetNode, getter_AddRefs(accessible)))) { - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, accessible, nsnull); + HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, accessible, nsnull); FireAccessibleFocusEvent(accessible, targetNode); } else { // for the html radio buttons -- apparently the focus code just works. :-) - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, accessible, nsnull); + HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, accessible, nsnull); } } else if (eventType.EqualsIgnoreCase("DOMMenuBarActive")) - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_MENUSTART, accessible, nsnull); + HandleEvent(nsIAccessibleEventListener::EVENT_MENUSTART, accessible, nsnull); else if (eventType.EqualsIgnoreCase("DOMMenuBarInactive")) { - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_MENUEND, accessible, nsnull); + HandleEvent(nsIAccessibleEventListener::EVENT_MENUEND, accessible, nsnull); GetAccFocused(getter_AddRefs(accessible)); if (accessible) { accessible->AccGetDOMNode(getter_AddRefs(targetNode)); @@ -563,7 +562,7 @@ NS_IMETHODIMP nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent) PRUint32 role = ROLE_NOTHING; accessible->GetAccRole(&role); if (role == ROLE_MENUPOPUP) - mListener->HandleEvent(menuEvent, accessible, nsnull); + HandleEvent(menuEvent, accessible, nsnull); } } #else @@ -571,7 +570,7 @@ NS_IMETHODIMP nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent) AtkTextChange textData; if (eventType.EqualsIgnoreCase("focus") || eventType.EqualsIgnoreCase("DOMMenuItemActive")) { if (treeItemAccessible) // use focused treeitem - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_FOCUS, treeItemAccessible, nsnull); + HandleEvent(nsIAccessibleEventListener::EVENT_FOCUS, treeItemAccessible, nsnull); else if (optionTargetNode && // use focused option NS_SUCCEEDED(mAccService->GetAccessibleFor(optionTargetNode, getter_AddRefs(accessible)))) FireAccessibleFocusEvent(accessible, optionTargetNode); @@ -580,23 +579,23 @@ NS_IMETHODIMP nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent) } else if (eventType.EqualsIgnoreCase("change")) { if (selectElement) // it's a HTML accessible->GetAccState(&stateData.state); stateData.enable = (stateData.state & STATE_CHECKED) != 0; stateData.state = STATE_CHECKED; - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, accessible, (AccessibleEventData*)&stateData); + HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, accessible, &stateData); } } } else if (eventType.EqualsIgnoreCase("select")) { if (selectControl) // it's a XUL - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_ATK_SELECTION_CHANGE, accessible, nsnull); + HandleEvent(nsIAccessibleEventListener::EVENT_ATK_SELECTION_CHANGE, accessible, nsnull); else if (treeBox && treeIndex >= 0) // it's a XUL // use EVENT_FOCUS instead of EVENT_ATK_SELECTION_CHANGE - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_FOCUS, treeItemAccessible, nsnull); + HandleEvent(nsIAccessibleEventListener::EVENT_FOCUS, treeItemAccessible, nsnull); } else if (eventType.EqualsIgnoreCase("input")) { // XXX kyle.yuan@sun.com future work, put correct values for text change data @@ -605,16 +604,16 @@ NS_IMETHODIMP nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent) textData.add = PR_TRUE; nsAutoString accName; accessible->GetAccValue(accName); - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_ATK_TEXT_CHANGE, accessible, (AccessibleEventData*)&textData); + HandleEvent(nsIAccessibleEventListener::EVENT_ATK_TEXT_CHANGE, accessible, &textData); } else if (eventType.EqualsIgnoreCase("ListitemStateChange")) // it's a XUL - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_FOCUS, accessible, nsnull); + HandleEvent(nsIAccessibleEventListener::EVENT_FOCUS, accessible, nsnull); else if (eventType.EqualsIgnoreCase("CheckboxStateChange") || // it's a XUL eventType.EqualsIgnoreCase("RadioStateChange")) { // it's a XUL accessible->GetAccState(&stateData.state); stateData.enable = (stateData.state & STATE_CHECKED) != 0; stateData.state = STATE_CHECKED; - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, accessible, (AccessibleEventData*)&stateData); + HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, accessible, &stateData); } else if (eventType.EqualsIgnoreCase("popupshowing")) FireAccessibleFocusEvent(accessible, targetNode); @@ -640,6 +639,13 @@ NS_IMETHODIMP nsRootAccessible::GetTargetNode(nsIDOMEvent *aEvent, nsCOMPtrHandleEvent(aEvent, aTarget, aData); + return NS_OK; +} + // ------- nsIDOMFocusListener Methods (1) ------------- NS_IMETHODIMP nsRootAccessible::Focus(nsIDOMEvent* aEvent) @@ -835,9 +841,7 @@ void nsRootAccessible::FireDocLoadFinished() if (mBusy != eBusyStateDone) { mBusy = eBusyStateDone; #ifndef MOZ_ACCESSIBILITY_ATK - if (mListener) { - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, this, nsnull); - } + HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, this, nsnull); #endif } } @@ -875,16 +879,13 @@ NS_IMETHODIMP nsRootAccessible::OnLocationChange(nsIWebProgress *aWebProgress, mBusy = eBusyStateLoading; // Fire a "new doc has started to load" event #ifndef MOZ_ACCESSIBILITY_ATK - if (mListener) - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, this, nsnull); + HandleEvent(nsIAccessibleEventListener::EVENT_STATE_CHANGE, this, nsnull); #else - if (mListener) { - AtkChildrenChange childrenData; - childrenData.index = -1; - childrenData.child = 0; - childrenData.add = PR_FALSE; - mListener->HandleEvent(nsIAccessibleEventListener::EVENT_REORDER , this, (AccessibleEventData*)&childrenData); - } + AtkChildrenChange childrenData; + childrenData.index = -1; + childrenData.child = 0; + childrenData.add = PR_FALSE; + HandleEvent(nsIAccessibleEventListener::EVENT_REORDER , this, &childrenData); #endif } diff --git a/mozilla/accessible/src/base/nsRootAccessible.h b/mozilla/accessible/src/base/nsRootAccessible.h index 16f89677c18..10a442faf3c 100644 --- a/mozilla/accessible/src/base/nsRootAccessible.h +++ b/mozilla/accessible/src/base/nsRootAccessible.h @@ -98,6 +98,7 @@ class nsRootAccessible : public nsAccessible, NS_IMETHOD GetAccParent(nsIAccessible * *aAccParent); NS_IMETHOD GetAccRole(PRUint32 *aAccRole); NS_IMETHOD GetAccState(PRUint32 *aAccState); + NS_IMETHOD HandleEvent(PRUint32 aEvent, nsIAccessible *aTarget, void * aData); // ----- nsIAccessibleEventReceiver ------------------- NS_IMETHOD AddAccessibleEventListener(nsIAccessibleEventListener *aListener); diff --git a/mozilla/widget/src/gtk2/mai/nsMaiTopLevel.cpp b/mozilla/widget/src/gtk2/mai/nsMaiTopLevel.cpp index fdab292e7bb..f30b0404b9e 100644 --- a/mozilla/widget/src/gtk2/mai/nsMaiTopLevel.cpp +++ b/mozilla/widget/src/gtk2/mai/nsMaiTopLevel.cpp @@ -178,7 +178,7 @@ MaiTopLevel::CreateAndCache(nsIAccessible *aAcc) NS_IMETHODIMP MaiTopLevel::HandleEvent(PRUint32 aEvent, nsIAccessible *aAccessible, - AccessibleEventData * aEventData) + void * aEventData) { nsresult rv = NS_ERROR_FAILURE; MaiWidget *pMaiObject = NULL; diff --git a/mozilla/widget/src/windows/Accessible.cpp b/mozilla/widget/src/windows/Accessible.cpp index 9466a52e886..27a97aa0b72 100644 --- a/mozilla/widget/src/windows/Accessible.cpp +++ b/mozilla/widget/src/windows/Accessible.cpp @@ -1240,7 +1240,7 @@ STDMETHODIMP RootAccessible::get_accChild( return Accessible::get_accChild(varChild, ppdispChild); } -NS_IMETHODIMP RootAccessible::HandleEvent(PRUint32 aEvent, nsIAccessible* aAccessible, AccessibleEventData* aData) +NS_IMETHODIMP RootAccessible::HandleEvent(PRUint32 aEvent, nsIAccessible* aAccessible, void* aData) { if (!mIsActive) { return NS_ERROR_FAILURE;