From efde1c6a3c3f24df5cb395ae4e85f7c2e46bb053 Mon Sep 17 00:00:00 2001 From: "bryner%brianryner.com" Date: Tue, 1 Feb 2005 20:23:41 +0000 Subject: [PATCH] Separate refresh from revalidate in nsXFormsModelElement (bug 279059). Patch by allan@beaufour.dk, r=aaronr@us.ibm.com, sr=me. git-svn-id: svn://10.0.0.236/trunk@168659 18797224-902f-48f8-a5cc-f745e15eee43 --- .../xforms/nsXFormsModelElement.cpp | 20 +++++++++++++------ .../extensions/xforms/nsXFormsModelElement.h | 8 +++++++- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/mozilla/extensions/xforms/nsXFormsModelElement.cpp b/mozilla/extensions/xforms/nsXFormsModelElement.cpp index 9cc5e64faa8..33d62f63bdf 100644 --- a/mozilla/extensions/xforms/nsXFormsModelElement.cpp +++ b/mozilla/extensions/xforms/nsXFormsModelElement.cpp @@ -446,6 +446,8 @@ nsXFormsModelElement::Rebuild() // TODO: Clear graph and re-attach elements + mControlsNeedingRefresh.Clear(); + // 1 . Clear graph nsresult rv; rv = mMDG.Clear(); @@ -635,9 +637,8 @@ nsXFormsModelElement::Revalidate() } if (rebind || refresh) { DispatchEvents(control, boundNode); - /// - /// @todo Should be moved to Refresh() (XXX) - control->Refresh(); + if (mControlsNeedingRefresh.IndexOf(control) == -1) + mControlsNeedingRefresh.AppendElement(control); } } @@ -654,9 +655,15 @@ nsXFormsModelElement::Refresh() printf("nsXFormsModelElement::Refresh()\n"); #endif - /// @todo Any refreshing is for the moment done in Revalidate(), so we do - /// not need to do anything here. But the refreshing part should probably - /// be moved to Refresh()... (XXX) + PRInt32 controlCount = mControlsNeedingRefresh.Count(); + for (PRInt32 i = 0; i < controlCount; ++i) { + nsIXFormsControl* control = NS_STATIC_CAST(nsIXFormsControl*, + mControlsNeedingRefresh[i]); + if (control) + control->Refresh(); + } + + mControlsNeedingRefresh.Clear(); return NS_OK; } @@ -753,6 +760,7 @@ NS_IMETHODIMP nsXFormsModelElement::RemoveFormControl(nsIXFormsControl *aControl) { mFormControls.RemoveElement(aControl); + mControlsNeedingRefresh.RemoveElement(aControl); return NS_OK; } diff --git a/mozilla/extensions/xforms/nsXFormsModelElement.h b/mozilla/extensions/xforms/nsXFormsModelElement.h index b59b7ab7bcb..8108f0b1a24 100644 --- a/mozilla/extensions/xforms/nsXFormsModelElement.h +++ b/mozilla/extensions/xforms/nsXFormsModelElement.h @@ -145,9 +145,15 @@ private: /** The MDG for this model */ nsXFormsMDGEngine mMDG; - /** List of changed nodes, ie. nodes that have not been informed about changes yet */ + /** + * List of changed nodes, ie. nodes that have not been informed about + * changes yet + */ nsXFormsMDGSet mChangedNodes; + /* Controls that need to a Refresh() */ + nsVoidArray mControlsNeedingRefresh; + // This flag indicates whether or not the document fired DOMContentLoaded PRBool mDocumentLoaded; };