[XForms] fix deferred events. Bug 378702, r=surkov+olli

This commit is contained in:
aaronr%us.ibm.com 2007-04-26 00:17:57 +00:00
Родитель 9398e54552
Коммит 988b059e7c
1 изменённых файлов: 26 добавлений и 8 удалений

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

@ -140,8 +140,8 @@ PR_STATIC_CALLBACK(PLDHashOperator) DoDeferredActions(nsISupports * aModel,
void * data)
{
if (aModel && aDeferred) {
nsCOMPtr<nsIModelElementPrivate> model =
NS_STATIC_CAST(nsIModelElementPrivate*, aModel);
nsCOMPtr<nsIModelElementPrivate> model(do_QueryInterface(aModel));
if (aDeferred & DEFERRED_REBUILD)
model->RequestRebuild();
if (aDeferred & DEFERRED_RECALCULATE)
@ -228,13 +228,19 @@ nsXFormsActionElement::SetRecalculate(nsIModelElementPrivate* aModel,
}
PRUint32 deferred = 0;
mDeferredUpdates.Get(aModel, &deferred);
// It is possible that QI's to an interface that isn't nsISupports (like
// nsIModelElementPrivate) could produce different values even from the same
// model element. So we'll convert the model to nsISupports before querying
// it or storing it via hashtable.
nsCOMPtr<nsISupports> temp(do_QueryInterface(aModel));
mDeferredUpdates.Get(temp, &deferred);
if (aEnable) {
deferred |= DEFERRED_RECALCULATE;
} else {
deferred &= ~DEFERRED_RECALCULATE;
}
mDeferredUpdates.Put(aModel, deferred);
mDeferredUpdates.Put(temp, deferred);
return NS_OK;
}
@ -247,13 +253,19 @@ nsXFormsActionElement::SetRevalidate(nsIModelElementPrivate* aModel,
}
PRUint32 deferred = 0;
mDeferredUpdates.Get(aModel, &deferred);
// It is possible that QI's to an interface that isn't nsISupports (like
// nsIModelElementPrivate) could produce different values even from the same
// model element. So we'll convert the model to nsISupports before querying
// it or storing it via hashtable.
nsCOMPtr<nsISupports> temp(do_QueryInterface(aModel));
mDeferredUpdates.Get(temp, &deferred);
if (aEnable) {
deferred |= DEFERRED_REVALIDATE;
} else {
deferred &= ~DEFERRED_REVALIDATE;
}
mDeferredUpdates.Put(aModel, deferred);
mDeferredUpdates.Put(temp, deferred);
return NS_OK;
}
@ -266,13 +278,19 @@ nsXFormsActionElement::SetRefresh(nsIModelElementPrivate* aModel,
}
PRUint32 deferred = 0;
mDeferredUpdates.Get(aModel, &deferred);
// It is possible that QI's to an interface that isn't nsISupports (like
// nsIModelElementPrivate) could produce different values even from the same
// model element. So we'll convert the model to nsISupports before querying
// it or storing it via hashtable.
nsCOMPtr<nsISupports> temp(do_QueryInterface(aModel));
mDeferredUpdates.Get(temp, &deferred);
if (aEnable) {
deferred |= DEFERRED_REFRESH;
} else {
deferred &= ~DEFERRED_REFRESH;
}
mDeferredUpdates.Put(aModel, deferred);
mDeferredUpdates.Put(temp, deferred);
return NS_OK;
}