зеркало из https://github.com/mozilla/pjs.git
[XForms] fix deferred events. Bug 378702, r=surkov+olli
This commit is contained in:
Родитель
9398e54552
Коммит
988b059e7c
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче