This commit is contained in:
Olli Pettay 2008-10-18 23:18:31 +03:00
Родитель a38f4c83cd
Коммит 34ff4e39e0
2 изменённых файлов: 7 добавлений и 13 удалений

Просмотреть файл

@ -1059,7 +1059,7 @@ nsresult
nsEventListenerManager::HandleEventSubType(nsListenerStruct* aListenerStruct,
nsIDOMEventListener* aListener,
nsIDOMEvent* aDOMEvent,
nsISupports* aCurrentTarget,
nsPIDOMEventTarget* aCurrentTarget,
PRUint32 aPhaseFlags)
{
nsresult result = NS_OK;
@ -1083,7 +1083,10 @@ nsEventListenerManager::HandleEventSubType(nsListenerStruct* aListenerStruct,
}
}
if (NS_SUCCEEDED(result)) {
// nsCxPusher will push and pop (automatically) the current cx onto the
// context stack
nsCxPusher pusher;
if (NS_SUCCEEDED(result) && pusher.Push(aCurrentTarget)) {
// nsIDOMEvent::currentTarget is set in nsEventDispatcher.
result = aListener->HandleEvent(aDOMEvent);
}
@ -1163,10 +1166,6 @@ found:
nsAutoTObserverArray<nsListenerStruct, 2>::EndLimitedIterator iter(mListeners);
nsAutoPopupStatePusher popupStatePusher(nsDOMEvent::GetEventPopupControlState(aEvent));
PRBool hasListener = PR_FALSE;
// nsCxPusher will push and pop (automatically) the current cx onto the
// context stack
nsCxPusher pusher;
PRBool didPush = PR_FALSE;
while (iter.HasMore()) {
nsListenerStruct* ls = &iter.GetNext();
PRBool useTypeInterface =
@ -1190,14 +1189,9 @@ found:
if (*aDOMEvent) {
nsRefPtr<nsIDOMEventListener> kungFuDeathGrip = ls->mListener;
if (useTypeInterface) {
if (didPush) {
didPush = PR_FALSE;
pusher.Pop();
}
DispatchToInterface(*aDOMEvent, ls->mListener,
dispData->method, *typeData->iid);
} else if (useGenericInterface &&
(didPush || (didPush = pusher.Push(aCurrentTarget)))) {
} else if (useGenericInterface) {
HandleEventSubType(ls, ls->mListener, *aDOMEvent,
aCurrentTarget, aFlags);
}

Просмотреть файл

@ -151,7 +151,7 @@ protected:
nsresult HandleEventSubType(nsListenerStruct* aListenerStruct,
nsIDOMEventListener* aListener,
nsIDOMEvent* aDOMEvent,
nsISupports* aCurrentTarget,
nsPIDOMEventTarget* aCurrentTarget,
PRUint32 aPhaseFlags);
nsresult CompileEventHandlerInternal(nsIScriptContext *aContext,
void *aScopeObject,