diff --git a/accessible/src/base/nsAccessibleEventData.cpp b/accessible/src/base/nsAccessibleEventData.cpp index ccbf00b78fd..ca80d0b1c0e 100755 --- a/accessible/src/base/nsAccessibleEventData.cpp +++ b/accessible/src/base/nsAccessibleEventData.cpp @@ -41,27 +41,33 @@ #include "nsIAccessNode.h" #include "nsIServiceManager.h" -NS_IMPL_ISUPPORTS1(nsAccessibleEventData, nsIAccessibleEvent) +NS_IMPL_ISUPPORTS1(nsAccEvent, nsIAccessibleEvent) -nsAccessibleEventData::nsAccessibleEventData(PRUint32 aEventType, nsIAccessible *aAccessible, - nsIAccessibleDocument *aDocAccessible, - void *aEventData): - mEventType(aEventType), mAccessible(aAccessible), mDocAccessible(aDocAccessible), - mEventData(aEventData) +nsAccEvent::nsAccEvent(PRUint32 aEventType, nsIAccessible *aAccessible, + void *aEventData): + mEventType(aEventType), mAccessible(aAccessible), mEventData(aEventData) { } -nsAccessibleEventData::nsAccessibleEventData(PRUint32 aEventType, nsIDOMNode *aDOMNode, - nsIAccessibleDocument *aDocAccessible, - void *aEventData): - mEventType(aEventType), mDOMNode(aDOMNode), mDocAccessible(aDocAccessible), - mEventData(aEventData) +nsAccEvent::nsAccEvent(PRUint32 aEventType, nsIDOMNode *aDOMNode, + void *aEventData): + mEventType(aEventType), mDOMNode(aDOMNode), mEventData(aEventData) { } -NS_IMETHODIMP nsAccessibleEventData::GetAccessible(nsIAccessible **aAccessible) +NS_IMETHODIMP +nsAccEvent::GetEventType(PRUint32 *aEventType) { + *aEventType = mEventType; + return NS_OK; +} + +NS_IMETHODIMP +nsAccEvent::GetAccessible(nsIAccessible **aAccessible) +{ + NS_ENSURE_ARG_POINTER(aAccessible); *aAccessible = nsnull; + if (!mAccessible) { NS_ENSURE_TRUE(mDOMNode, NS_ERROR_FAILURE); nsCOMPtr accService = @@ -72,17 +78,39 @@ NS_IMETHODIMP nsAccessibleEventData::GetAccessible(nsIAccessible **aAccessible) return NS_OK; } } - NS_ADDREF(*aAccessible = mAccessible); + NS_IF_ADDREF(*aAccessible = mAccessible); return NS_OK; } -NS_IMETHODIMP nsAccessibleEventData::GetDOMNode(nsIDOMNode **aDOMNode) +NS_IMETHODIMP +nsAccEvent::GetDOMNode(nsIDOMNode **aDOMNode) { + NS_ENSURE_ARG_POINTER(aDOMNode); + *aDOMNode = nsnull; + if (!mDOMNode) { nsCOMPtr accessNode(do_QueryInterface(mAccessible)); NS_ENSURE_TRUE(accessNode, NS_ERROR_FAILURE); accessNode->GetDOMNode(getter_AddRefs(mDOMNode)); } - NS_ADDREF(*aDOMNode = mDOMNode); + + NS_IF_ADDREF(*aDOMNode = mDOMNode); return NS_OK; } + +NS_IMETHODIMP +nsAccEvent::GetAccessibleDocument(nsIAccessibleDocument **aDocAccessible) +{ + NS_ENSURE_ARG_POINTER(aDocAccessible); + *aDocAccessible = nsnull; + + if (!mDocAccessible) { + nsCOMPtr accessNode(do_QueryInterface(mAccessible)); + NS_ENSURE_TRUE(accessNode, NS_ERROR_FAILURE); + accessNode->GetAccessibleDocument(getter_AddRefs(mDocAccessible)); + } + + NS_IF_ADDREF(*aDocAccessible = mDocAccessible); + return NS_OK; +} + diff --git a/accessible/src/base/nsAccessibleEventData.h b/accessible/src/base/nsAccessibleEventData.h index d3db57579b1..61e85100bfd 100644 --- a/accessible/src/base/nsAccessibleEventData.h +++ b/accessible/src/base/nsAccessibleEventData.h @@ -46,34 +46,24 @@ #include "nsIAccessibleDocument.h" #include "nsIDOMNode.h" -class nsAccessibleEventData: public nsIAccessibleEvent +class nsAccEvent: public nsIAccessibleEvent { - public: - // Initialize with an nsIAccessible - nsAccessibleEventData(PRUint32 aEventType, nsIAccessible *aAccessible, - nsIAccessibleDocument *aDocAccessible, - void *aEventData); - // Initialize with an nsIDOMNode - nsAccessibleEventData(PRUint32 aEventType, nsIDOMNode *aDOMNode, - nsIAccessibleDocument *aDocAccessible, - void *aEventData); - virtual ~nsAccessibleEventData() {}; +public: + // Initialize with an nsIAccessible + nsAccEvent(PRUint32 aEventType, nsIAccessible *aAccessible, void *aEventData); + // Initialize with an nsIDOMNode + nsAccEvent(PRUint32 aEventType, nsIDOMNode *aDOMNode, void *aEventData); + virtual ~nsAccEvent() {}; - NS_DECL_ISUPPORTS + NS_DECL_ISUPPORTS + NS_DECL_NSIACCESSIBLEEVENT - //nsIAccessibleEvent - NS_IMETHOD GetEventType(PRUint32 *aEventType) {*aEventType = mEventType; return NS_OK;} - NS_IMETHOD GetAccessible(nsIAccessible **aAccessible); - NS_IMETHOD GetAccessibleDocument(nsIAccessibleDocument **aDocAccessible) - {NS_ADDREF(*aDocAccessible = mDocAccessible); return NS_OK;} - NS_IMETHOD GetDOMNode(nsIDOMNode **aDOMNode); - - private: - PRUint32 mEventType; - nsCOMPtr mAccessible; - nsCOMPtr mDOMNode; - nsCOMPtr mDocAccessible; - void *mEventData; +private: + PRUint32 mEventType; + nsCOMPtr mAccessible; + nsCOMPtr mDOMNode; + nsCOMPtr mDocAccessible; + void *mEventData; }; // XXX todo: We might want to use XPCOM interfaces instead of structs diff --git a/accessible/src/base/nsDocAccessible.cpp b/accessible/src/base/nsDocAccessible.cpp index 23ae11988f2..826b76c424f 100644 --- a/accessible/src/base/nsDocAccessible.cpp +++ b/accessible/src/base/nsDocAccessible.cpp @@ -1111,8 +1111,7 @@ nsresult nsDocAccessible::FireDelayedToolkitEvent(PRUint32 aEvent, // XXX Add related data for ATK support. // For example, state change event should provide what state has changed, // as well as the old and new value. - nsCOMPtr event = - new nsAccessibleEventData(aEvent, aDOMNode, this, aData); + nsCOMPtr event = new nsAccEvent(aEvent, aDOMNode, aData); NS_ENSURE_TRUE(event, NS_ERROR_OUT_OF_MEMORY); mEventsToFire.AppendObject(event); if (!isTimerStarted) { @@ -1431,7 +1430,8 @@ NS_IMETHODIMP nsDocAccessible::FireToolkitEvent(PRUint32 aEvent, nsIAccessible* return NS_ERROR_FAILURE; } - nsCOMPtr accEvent = new nsAccessibleEventData(aEvent, aAccessible, this, aData); + nsCOMPtr accEvent = new nsAccEvent(aEvent, aAccessible, + aData); NS_ENSURE_TRUE(accEvent, NS_ERROR_OUT_OF_MEMORY); return obsService->NotifyObservers(accEvent, NS_ACCESSIBLE_EVENT_TOPIC, nsnull);