[XForms] fix deferred events. Bug 378702, r=surkov+olli
git-svn-id: svn://10.0.0.236/trunk@225055 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user