Fix for bug 377037 - remove acc doc from arguments of nsIAccessibleEvent object, r=aaronlev

This commit is contained in:
surkov.alexander@gmail.com 2007-04-10 09:28:38 -07:00
parent 4d9f2625eb
commit 02031d9b86
3 changed files with 61 additions and 43 deletions

View File

@ -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<nsIAccessibilityService> 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<nsIAccessNode> 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<nsIAccessNode> accessNode(do_QueryInterface(mAccessible));
NS_ENSURE_TRUE(accessNode, NS_ERROR_FAILURE);
accessNode->GetAccessibleDocument(getter_AddRefs(mDocAccessible));
}
NS_IF_ADDREF(*aDocAccessible = mDocAccessible);
return NS_OK;
}

View File

@ -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<nsIAccessible> mAccessible;
nsCOMPtr<nsIDOMNode> mDOMNode;
nsCOMPtr<nsIAccessibleDocument> mDocAccessible;
void *mEventData;
private:
PRUint32 mEventType;
nsCOMPtr<nsIAccessible> mAccessible;
nsCOMPtr<nsIDOMNode> mDOMNode;
nsCOMPtr<nsIAccessibleDocument> mDocAccessible;
void *mEventData;
};
// XXX todo: We might want to use XPCOM interfaces instead of structs

View File

@ -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<nsIAccessibleEvent> event =
new nsAccessibleEventData(aEvent, aDOMNode, this, aData);
nsCOMPtr<nsIAccessibleEvent> 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<nsIAccessibleEvent> accEvent = new nsAccessibleEventData(aEvent, aAccessible, this, aData);
nsCOMPtr<nsIAccessibleEvent> accEvent = new nsAccEvent(aEvent, aAccessible,
aData);
NS_ENSURE_TRUE(accEvent, NS_ERROR_OUT_OF_MEMORY);
return obsService->NotifyObservers(accEvent, NS_ACCESSIBLE_EVENT_TOPIC, nsnull);