This commit is contained in:
hyatt%netscape.com 1999-05-25 00:29:55 +00:00
Родитель d9e9a860fd
Коммит cec22bc0a9
3 изменённых файлов: 36 добавлений и 27 удалений

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

@ -62,6 +62,7 @@
#include "nsIParser.h" #include "nsIParser.h"
#include "nsIPresContext.h" #include "nsIPresContext.h"
#include "nsIPresShell.h" #include "nsIPresShell.h"
#include "nsIHTMLContent.h"
#include "nsIRDFCompositeDataSource.h" #include "nsIRDFCompositeDataSource.h"
#include "nsIRDFContainerUtils.h" #include "nsIRDFContainerUtils.h"
#include "nsIRDFContentModelBuilder.h" #include "nsIRDFContentModelBuilder.h"
@ -2675,11 +2676,6 @@ XULDocumentImpl::SetForm(nsIDOMHTMLFormElement* aForm)
if (aForm) { if (aForm) {
NS_ADDREF(aForm); NS_ADDREF(aForm);
mHiddenForm = aForm; mHiddenForm = aForm;
nsCOMPtr<nsIContent> content = do_QueryInterface(aForm);
if (content) {
// Add this node as a child
mRootContent->AppendChildTo(content, PR_TRUE);
}
} }
return NS_OK; return NS_OK;
} }

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

@ -636,6 +636,39 @@ RDFXULBuilderImpl::CreateContents(nsIContent* aElement)
if (NS_FAILED(rv)) return rv; if (NS_FAILED(rv)) return rv;
} }
// If we're the root content, then prepend a special hidden form
// element.
if (aElement == mRoot) {
// Always insert a hidden form as the very first child of the window.
// Create a new form element.
nsAutoString tag("form");
nsCOMPtr<nsIHTMLContent> newElement;
if (!mHTMLElementFactory) {
rv = nsComponentManager::CreateInstance(kHTMLElementFactoryCID,
nsnull,
kIHTMLElementFactoryIID,
(void**) &mHTMLElementFactory);
if (NS_FAILED(rv)) {
return rv;
}
}
rv = mHTMLElementFactory->CreateInstanceByTag(tag,
getter_AddRefs(newElement));
NS_ASSERTION(NS_SUCCEEDED(rv), "unable to create HTML element");
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsIDOMHTMLFormElement> htmlFormElement = do_QueryInterface(newElement);
if (htmlFormElement) {
mDocument->SetForm(htmlFormElement);
nsCOMPtr<nsIContent> content = do_QueryInterface(htmlFormElement);
if (content) {
// Add this node as a child
mRoot->InsertChildAt(content, 0, PR_FALSE);
}
}
}
// Now that we've built the children, check to see if the includesrc attribute // Now that we've built the children, check to see if the includesrc attribute
// exists on the node. // exists on the node.
nsString includeSrc; nsString includeSrc;
@ -1696,22 +1729,6 @@ RDFXULBuilderImpl::CreateHTMLElement(nsINameSpace* aContainingNameSpace,
// Retrieve the hidden form from the XUL document. // Retrieve the hidden form from the XUL document.
nsCOMPtr<nsIDOMHTMLFormElement> htmlFormElement; nsCOMPtr<nsIDOMHTMLFormElement> htmlFormElement;
mDocument->GetForm(getter_AddRefs(htmlFormElement)); mDocument->GetForm(getter_AddRefs(htmlFormElement));
if (!htmlFormElement) {
// Create a new form element.
nsAutoString tag("form");
nsCOMPtr<nsIHTMLContent> newElement;
rv = mHTMLElementFactory->CreateInstanceByTag(tag,
getter_AddRefs(newElement));
NS_ASSERTION(NS_SUCCEEDED(rv), "unable to create HTML element");
if (NS_FAILED(rv)) return rv;
htmlFormElement = do_QueryInterface(newElement);
if (!htmlFormElement) {
NS_ERROR("Uh-oh! Couldn't make a form!");
return NS_ERROR_FAILURE;
}
mDocument->SetForm(htmlFormElement);
}
// Set the form // Set the form
htmlFormControl->SetForm(htmlFormElement); htmlFormControl->SetForm(htmlFormElement);

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

@ -62,6 +62,7 @@
#include "nsIParser.h" #include "nsIParser.h"
#include "nsIPresContext.h" #include "nsIPresContext.h"
#include "nsIPresShell.h" #include "nsIPresShell.h"
#include "nsIHTMLContent.h"
#include "nsIRDFCompositeDataSource.h" #include "nsIRDFCompositeDataSource.h"
#include "nsIRDFContainerUtils.h" #include "nsIRDFContainerUtils.h"
#include "nsIRDFContentModelBuilder.h" #include "nsIRDFContentModelBuilder.h"
@ -2675,11 +2676,6 @@ XULDocumentImpl::SetForm(nsIDOMHTMLFormElement* aForm)
if (aForm) { if (aForm) {
NS_ADDREF(aForm); NS_ADDREF(aForm);
mHiddenForm = aForm; mHiddenForm = aForm;
nsCOMPtr<nsIContent> content = do_QueryInterface(aForm);
if (content) {
// Add this node as a child
mRootContent->AppendChildTo(content, PR_TRUE);
}
} }
return NS_OK; return NS_OK;
} }