From 8002cdafafec74a17065d946ae00df519db5eefa Mon Sep 17 00:00:00 2001 From: "joki%netscape.com" Date: Tue, 16 May 2000 18:46:38 +0000 Subject: [PATCH] Fix for bug 39422, fix use of event.target from JS. a:leaf, r:vidur git-svn-id: svn://10.0.0.236/trunk@70073 18797224-902f-48f8-a5cc-f745e15eee43 --- .../events/src/nsEventListenerManager.cpp | 38 +++++++++++++++++++ .../events/src/nsEventListenerManager.cpp | 38 +++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/mozilla/content/events/src/nsEventListenerManager.cpp b/mozilla/content/events/src/nsEventListenerManager.cpp index bae5cab6ef9..5eb2630fd03 100644 --- a/mozilla/content/events/src/nsEventListenerManager.cpp +++ b/mozilla/content/events/src/nsEventListenerManager.cpp @@ -98,12 +98,50 @@ nsEventListenerManager::~nsEventListenerManager() NS_IMPL_ADDREF(nsEventListenerManager) NS_IMPL_RELEASE(nsEventListenerManager) + +// We need to return to the old QI form briefly to deal with the +// results of the partial aggregation we began using nsGenericElement +// and nsGenericDOMDataNode. We should look for a better long term +// solution. -joki +nsresult nsEventListenerManager::QueryInterface(REFNSIID aIID, void** aInstancePtr) +{ + if (nsnull == aInstancePtr) { + return NS_ERROR_NULL_POINTER; + } + if (aIID.Equals(NS_GET_IID(nsIEventListenerManager))) { + *aInstancePtr = (void*)(nsIEventListenerManager*)this; + AddRef(); + return NS_OK; + } + if (aIID.Equals(NS_GET_IID(nsIDOMEventTarget))) { + *aInstancePtr = (void*)(nsIDOMEventTarget*)this; + AddRef(); + return NS_OK; + } + if (aIID.Equals(NS_GET_IID(nsIDOMEventReceiver))) { + *aInstancePtr = (void*)(nsIDOMEventReceiver*)this; + AddRef(); + return NS_OK; + } + if (aIID.Equals(NS_GET_IID(nsISupports))) { + *aInstancePtr = (void*)(nsISupports*)(nsIEventListenerManager*)this; + AddRef(); + return NS_OK; + } + if (mTarget) { + return mTarget->QueryInterface(aIID, aInstancePtr); + } + return NS_NOINTERFACE; +} + +#if 0 NS_INTERFACE_MAP_BEGIN(nsEventListenerManager) NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIEventListenerManager) NS_INTERFACE_MAP_ENTRY(nsIEventListenerManager) NS_INTERFACE_MAP_ENTRY(nsIDOMEventTarget) NS_INTERFACE_MAP_ENTRY(nsIDOMEventReceiver) NS_INTERFACE_MAP_END +#endif nsVoidArray** nsEventListenerManager::GetListenersByIID(const nsIID& aIID) { diff --git a/mozilla/layout/events/src/nsEventListenerManager.cpp b/mozilla/layout/events/src/nsEventListenerManager.cpp index bae5cab6ef9..5eb2630fd03 100644 --- a/mozilla/layout/events/src/nsEventListenerManager.cpp +++ b/mozilla/layout/events/src/nsEventListenerManager.cpp @@ -98,12 +98,50 @@ nsEventListenerManager::~nsEventListenerManager() NS_IMPL_ADDREF(nsEventListenerManager) NS_IMPL_RELEASE(nsEventListenerManager) + +// We need to return to the old QI form briefly to deal with the +// results of the partial aggregation we began using nsGenericElement +// and nsGenericDOMDataNode. We should look for a better long term +// solution. -joki +nsresult nsEventListenerManager::QueryInterface(REFNSIID aIID, void** aInstancePtr) +{ + if (nsnull == aInstancePtr) { + return NS_ERROR_NULL_POINTER; + } + if (aIID.Equals(NS_GET_IID(nsIEventListenerManager))) { + *aInstancePtr = (void*)(nsIEventListenerManager*)this; + AddRef(); + return NS_OK; + } + if (aIID.Equals(NS_GET_IID(nsIDOMEventTarget))) { + *aInstancePtr = (void*)(nsIDOMEventTarget*)this; + AddRef(); + return NS_OK; + } + if (aIID.Equals(NS_GET_IID(nsIDOMEventReceiver))) { + *aInstancePtr = (void*)(nsIDOMEventReceiver*)this; + AddRef(); + return NS_OK; + } + if (aIID.Equals(NS_GET_IID(nsISupports))) { + *aInstancePtr = (void*)(nsISupports*)(nsIEventListenerManager*)this; + AddRef(); + return NS_OK; + } + if (mTarget) { + return mTarget->QueryInterface(aIID, aInstancePtr); + } + return NS_NOINTERFACE; +} + +#if 0 NS_INTERFACE_MAP_BEGIN(nsEventListenerManager) NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIEventListenerManager) NS_INTERFACE_MAP_ENTRY(nsIEventListenerManager) NS_INTERFACE_MAP_ENTRY(nsIDOMEventTarget) NS_INTERFACE_MAP_ENTRY(nsIDOMEventReceiver) NS_INTERFACE_MAP_END +#endif nsVoidArray** nsEventListenerManager::GetListenersByIID(const nsIID& aIID) {