зеркало из https://github.com/mozilla/gecko-dev.git
Defer creation of resource cache until a sort is imposed. Also, added a temporary working for db->OnChange() not enjoying a null oldTarget.
This commit is contained in:
Родитель
3eff44b867
Коммит
86f0302402
|
@ -25,7 +25,7 @@
|
||||||
#include "nsIRDFResource.idl"
|
#include "nsIRDFResource.idl"
|
||||||
|
|
||||||
|
|
||||||
[ptr] native nsIRDFResourceArray( nsIRDFResource *);
|
[ptr] native nsIRDFDataSourceHandle( nsIRDFDataSource *);
|
||||||
|
|
||||||
interface nsIContent;
|
interface nsIContent;
|
||||||
interface nsIDOMNode;
|
interface nsIDOMNode;
|
||||||
|
@ -35,7 +35,7 @@ interface nsIDOMNode;
|
||||||
interface nsIXULSortService : nsISupports
|
interface nsIXULSortService : nsISupports
|
||||||
{
|
{
|
||||||
void Sort(in nsIDOMNode node, in string sortResource, in string sortDirection);
|
void Sort(in nsIDOMNode node, in string sortResource, in string sortDirection);
|
||||||
[noscript] void InsertContainerNode(in nsIRDFCompositeDataSource db, in nsIRDFDataSource cache, in nsIContent root, in nsIContent trueParent,
|
[noscript] void InsertContainerNode(in nsIRDFCompositeDataSource db, in nsIRDFDataSourceHandle cacheHandle, in nsIContent root, in nsIContent trueParent,
|
||||||
in nsIContent container, in nsIContent node, in boolean aNotify);
|
in nsIContent container, in nsIContent node, in boolean aNotify);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1438,7 +1438,7 @@ XULSortServiceImpl::SortTreeChildren(nsIContent *container, sortPtr sortInfo)
|
||||||
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
XULSortServiceImpl::InsertContainerNode(nsIRDFCompositeDataSource *db, nsIRDFDataSource *cache, nsIContent *root,
|
XULSortServiceImpl::InsertContainerNode(nsIRDFCompositeDataSource *db, nsIRDFDataSource **cacheHandle, nsIContent *root,
|
||||||
nsIContent *trueParent, nsIContent *container, nsIContent *node, PRBool aNotify)
|
nsIContent *trueParent, nsIContent *container, nsIContent *node, PRBool aNotify)
|
||||||
{
|
{
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
|
@ -1449,7 +1449,6 @@ XULSortServiceImpl::InsertContainerNode(nsIRDFCompositeDataSource *db, nsIRDFDat
|
||||||
sortInfo.rdfService = gRDFService;
|
sortInfo.rdfService = gRDFService;
|
||||||
sortInfo.db = db;
|
sortInfo.db = db;
|
||||||
sortInfo.resCache = nsnull;
|
sortInfo.resCache = nsnull;
|
||||||
sortInfo.mInner = cache; /* can be null */
|
|
||||||
sortInfo.colIndex = -1;
|
sortInfo.colIndex = -1;
|
||||||
sortInfo.parentContainer = trueParent;
|
sortInfo.parentContainer = trueParent;
|
||||||
sortInfo.kTreeCellAtom = kTreeCellAtom;
|
sortInfo.kTreeCellAtom = kTreeCellAtom;
|
||||||
|
@ -1457,6 +1456,14 @@ XULSortServiceImpl::InsertContainerNode(nsIRDFCompositeDataSource *db, nsIRDFDat
|
||||||
sortInfo.sortProperty = nsnull;
|
sortInfo.sortProperty = nsnull;
|
||||||
sortInfo.sortProperty2 = nsnull;
|
sortInfo.sortProperty2 = nsnull;
|
||||||
sortInfo.inbetweenSeparatorSort = PR_FALSE;
|
sortInfo.inbetweenSeparatorSort = PR_FALSE;
|
||||||
|
if (cacheHandle != nsnull)
|
||||||
|
{
|
||||||
|
sortInfo.mInner = *cacheHandle; // Note: this can/might be null
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sortInfo.mInner = nsnull;
|
||||||
|
}
|
||||||
|
|
||||||
PRBool sortInfoAvailable = PR_FALSE;
|
PRBool sortInfoAvailable = PR_FALSE;
|
||||||
|
|
||||||
|
@ -1625,6 +1632,12 @@ XULSortServiceImpl::InsertContainerNode(nsIRDFCompositeDataSource *db, nsIRDFDat
|
||||||
{
|
{
|
||||||
container->AppendChildTo(node, aNotify);
|
container->AppendChildTo(node, aNotify);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((cacheHandle) && (sortInfo.mInner) && ((*cacheHandle) != sortInfo.mInner))
|
||||||
|
{
|
||||||
|
*cacheHandle = sortInfo.mInner;
|
||||||
|
NS_ADDREF(*cacheHandle);
|
||||||
|
}
|
||||||
return(NS_OK);
|
return(NS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -597,9 +597,6 @@ RDFGenericBuilderImpl::Init()
|
||||||
(nsISupports**) &gXULSortService);
|
(nsISupports**) &gXULSortService);
|
||||||
if (NS_FAILED(rv)) return rv;
|
if (NS_FAILED(rv)) return rv;
|
||||||
|
|
||||||
rv = nsComponentManager::CreateInstance(kRDFInMemoryDataSourceCID,
|
|
||||||
nsnull, nsIRDFDataSource::GetIID(), (void **)&mCache);
|
|
||||||
|
|
||||||
rv = nsComponentManager::CreateInstance(kHTMLElementFactoryCID,
|
rv = nsComponentManager::CreateInstance(kHTMLElementFactoryCID,
|
||||||
nsnull,
|
nsnull,
|
||||||
kIHTMLElementFactoryIID,
|
kIHTMLElementFactoryIID,
|
||||||
|
@ -726,9 +723,6 @@ RDFGenericBuilderImpl::SetRootContent(nsIContent* aElement)
|
||||||
{
|
{
|
||||||
// flush (delete) the cache when re-rerooting the generated content
|
// flush (delete) the cache when re-rerooting the generated content
|
||||||
mCache = nsnull;
|
mCache = nsnull;
|
||||||
// and then re-create a new, empty cache
|
|
||||||
nsComponentManager::CreateInstance(kRDFInMemoryDataSourceCID,
|
|
||||||
nsnull, nsIRDFDataSource::GetIID(), (void **)&mCache);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -1212,8 +1206,17 @@ RDFGenericBuilderImpl::OnChange(nsIRDFResource* aSource,
|
||||||
|
|
||||||
if (mCache)
|
if (mCache)
|
||||||
{
|
{
|
||||||
|
if (aOldTarget)
|
||||||
|
{
|
||||||
|
// XXX fix this: in-memory DS doesn't like a null oldTarget
|
||||||
mCache->Change(aSource, aProperty, aOldTarget, aNewTarget);
|
mCache->Change(aSource, aProperty, aOldTarget, aNewTarget);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// XXX should get tv via observer interface
|
||||||
|
mCache->Assert(aSource, aProperty, aNewTarget, PR_TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsISupportsArray> elements;
|
nsCOMPtr<nsISupportsArray> elements;
|
||||||
rv = NS_NewISupportsArray(getter_AddRefs(elements));
|
rv = NS_NewISupportsArray(getter_AddRefs(elements));
|
||||||
|
@ -2063,8 +2066,14 @@ RDFGenericBuilderImpl::BuildContentFromTemplate(nsIContent *aTemplateNode,
|
||||||
rv = NS_ERROR_UNEXPECTED;
|
rv = NS_ERROR_UNEXPECTED;
|
||||||
|
|
||||||
if (gXULSortService && isResourceElement) {
|
if (gXULSortService && isResourceElement) {
|
||||||
rv = gXULSortService->InsertContainerNode(mDB, mCache,
|
nsCOMPtr<nsIRDFDataSource> tempCache = nsnull;
|
||||||
|
|
||||||
|
rv = gXULSortService->InsertContainerNode(mDB, getter_AddRefs(tempCache),
|
||||||
mRoot, trueParent, aRealNode, realKid, aNotify);
|
mRoot, trueParent, aRealNode, realKid, aNotify);
|
||||||
|
if (tempCache)
|
||||||
|
{
|
||||||
|
mCache = tempCache;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
#include "nsIRDFResource.idl"
|
#include "nsIRDFResource.idl"
|
||||||
|
|
||||||
|
|
||||||
[ptr] native nsIRDFResourceArray( nsIRDFResource *);
|
[ptr] native nsIRDFDataSourceHandle( nsIRDFDataSource *);
|
||||||
|
|
||||||
interface nsIContent;
|
interface nsIContent;
|
||||||
interface nsIDOMNode;
|
interface nsIDOMNode;
|
||||||
|
@ -35,7 +35,7 @@ interface nsIDOMNode;
|
||||||
interface nsIXULSortService : nsISupports
|
interface nsIXULSortService : nsISupports
|
||||||
{
|
{
|
||||||
void Sort(in nsIDOMNode node, in string sortResource, in string sortDirection);
|
void Sort(in nsIDOMNode node, in string sortResource, in string sortDirection);
|
||||||
[noscript] void InsertContainerNode(in nsIRDFCompositeDataSource db, in nsIRDFDataSource cache, in nsIContent root, in nsIContent trueParent,
|
[noscript] void InsertContainerNode(in nsIRDFCompositeDataSource db, in nsIRDFDataSourceHandle cacheHandle, in nsIContent root, in nsIContent trueParent,
|
||||||
in nsIContent container, in nsIContent node, in boolean aNotify);
|
in nsIContent container, in nsIContent node, in boolean aNotify);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -597,9 +597,6 @@ RDFGenericBuilderImpl::Init()
|
||||||
(nsISupports**) &gXULSortService);
|
(nsISupports**) &gXULSortService);
|
||||||
if (NS_FAILED(rv)) return rv;
|
if (NS_FAILED(rv)) return rv;
|
||||||
|
|
||||||
rv = nsComponentManager::CreateInstance(kRDFInMemoryDataSourceCID,
|
|
||||||
nsnull, nsIRDFDataSource::GetIID(), (void **)&mCache);
|
|
||||||
|
|
||||||
rv = nsComponentManager::CreateInstance(kHTMLElementFactoryCID,
|
rv = nsComponentManager::CreateInstance(kHTMLElementFactoryCID,
|
||||||
nsnull,
|
nsnull,
|
||||||
kIHTMLElementFactoryIID,
|
kIHTMLElementFactoryIID,
|
||||||
|
@ -726,9 +723,6 @@ RDFGenericBuilderImpl::SetRootContent(nsIContent* aElement)
|
||||||
{
|
{
|
||||||
// flush (delete) the cache when re-rerooting the generated content
|
// flush (delete) the cache when re-rerooting the generated content
|
||||||
mCache = nsnull;
|
mCache = nsnull;
|
||||||
// and then re-create a new, empty cache
|
|
||||||
nsComponentManager::CreateInstance(kRDFInMemoryDataSourceCID,
|
|
||||||
nsnull, nsIRDFDataSource::GetIID(), (void **)&mCache);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -1212,8 +1206,17 @@ RDFGenericBuilderImpl::OnChange(nsIRDFResource* aSource,
|
||||||
|
|
||||||
if (mCache)
|
if (mCache)
|
||||||
{
|
{
|
||||||
|
if (aOldTarget)
|
||||||
|
{
|
||||||
|
// XXX fix this: in-memory DS doesn't like a null oldTarget
|
||||||
mCache->Change(aSource, aProperty, aOldTarget, aNewTarget);
|
mCache->Change(aSource, aProperty, aOldTarget, aNewTarget);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// XXX should get tv via observer interface
|
||||||
|
mCache->Assert(aSource, aProperty, aNewTarget, PR_TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsISupportsArray> elements;
|
nsCOMPtr<nsISupportsArray> elements;
|
||||||
rv = NS_NewISupportsArray(getter_AddRefs(elements));
|
rv = NS_NewISupportsArray(getter_AddRefs(elements));
|
||||||
|
@ -2063,8 +2066,14 @@ RDFGenericBuilderImpl::BuildContentFromTemplate(nsIContent *aTemplateNode,
|
||||||
rv = NS_ERROR_UNEXPECTED;
|
rv = NS_ERROR_UNEXPECTED;
|
||||||
|
|
||||||
if (gXULSortService && isResourceElement) {
|
if (gXULSortService && isResourceElement) {
|
||||||
rv = gXULSortService->InsertContainerNode(mDB, mCache,
|
nsCOMPtr<nsIRDFDataSource> tempCache = nsnull;
|
||||||
|
|
||||||
|
rv = gXULSortService->InsertContainerNode(mDB, getter_AddRefs(tempCache),
|
||||||
mRoot, trueParent, aRealNode, realKid, aNotify);
|
mRoot, trueParent, aRealNode, realKid, aNotify);
|
||||||
|
if (tempCache)
|
||||||
|
{
|
||||||
|
mCache = tempCache;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
|
|
|
@ -1438,7 +1438,7 @@ XULSortServiceImpl::SortTreeChildren(nsIContent *container, sortPtr sortInfo)
|
||||||
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
XULSortServiceImpl::InsertContainerNode(nsIRDFCompositeDataSource *db, nsIRDFDataSource *cache, nsIContent *root,
|
XULSortServiceImpl::InsertContainerNode(nsIRDFCompositeDataSource *db, nsIRDFDataSource **cacheHandle, nsIContent *root,
|
||||||
nsIContent *trueParent, nsIContent *container, nsIContent *node, PRBool aNotify)
|
nsIContent *trueParent, nsIContent *container, nsIContent *node, PRBool aNotify)
|
||||||
{
|
{
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
|
@ -1449,7 +1449,6 @@ XULSortServiceImpl::InsertContainerNode(nsIRDFCompositeDataSource *db, nsIRDFDat
|
||||||
sortInfo.rdfService = gRDFService;
|
sortInfo.rdfService = gRDFService;
|
||||||
sortInfo.db = db;
|
sortInfo.db = db;
|
||||||
sortInfo.resCache = nsnull;
|
sortInfo.resCache = nsnull;
|
||||||
sortInfo.mInner = cache; /* can be null */
|
|
||||||
sortInfo.colIndex = -1;
|
sortInfo.colIndex = -1;
|
||||||
sortInfo.parentContainer = trueParent;
|
sortInfo.parentContainer = trueParent;
|
||||||
sortInfo.kTreeCellAtom = kTreeCellAtom;
|
sortInfo.kTreeCellAtom = kTreeCellAtom;
|
||||||
|
@ -1457,6 +1456,14 @@ XULSortServiceImpl::InsertContainerNode(nsIRDFCompositeDataSource *db, nsIRDFDat
|
||||||
sortInfo.sortProperty = nsnull;
|
sortInfo.sortProperty = nsnull;
|
||||||
sortInfo.sortProperty2 = nsnull;
|
sortInfo.sortProperty2 = nsnull;
|
||||||
sortInfo.inbetweenSeparatorSort = PR_FALSE;
|
sortInfo.inbetweenSeparatorSort = PR_FALSE;
|
||||||
|
if (cacheHandle != nsnull)
|
||||||
|
{
|
||||||
|
sortInfo.mInner = *cacheHandle; // Note: this can/might be null
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sortInfo.mInner = nsnull;
|
||||||
|
}
|
||||||
|
|
||||||
PRBool sortInfoAvailable = PR_FALSE;
|
PRBool sortInfoAvailable = PR_FALSE;
|
||||||
|
|
||||||
|
@ -1625,6 +1632,12 @@ XULSortServiceImpl::InsertContainerNode(nsIRDFCompositeDataSource *db, nsIRDFDat
|
||||||
{
|
{
|
||||||
container->AppendChildTo(node, aNotify);
|
container->AppendChildTo(node, aNotify);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((cacheHandle) && (sortInfo.mInner) && ((*cacheHandle) != sortInfo.mInner))
|
||||||
|
{
|
||||||
|
*cacheHandle = sortInfo.mInner;
|
||||||
|
NS_ADDREF(*cacheHandle);
|
||||||
|
}
|
||||||
return(NS_OK);
|
return(NS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -597,9 +597,6 @@ RDFGenericBuilderImpl::Init()
|
||||||
(nsISupports**) &gXULSortService);
|
(nsISupports**) &gXULSortService);
|
||||||
if (NS_FAILED(rv)) return rv;
|
if (NS_FAILED(rv)) return rv;
|
||||||
|
|
||||||
rv = nsComponentManager::CreateInstance(kRDFInMemoryDataSourceCID,
|
|
||||||
nsnull, nsIRDFDataSource::GetIID(), (void **)&mCache);
|
|
||||||
|
|
||||||
rv = nsComponentManager::CreateInstance(kHTMLElementFactoryCID,
|
rv = nsComponentManager::CreateInstance(kHTMLElementFactoryCID,
|
||||||
nsnull,
|
nsnull,
|
||||||
kIHTMLElementFactoryIID,
|
kIHTMLElementFactoryIID,
|
||||||
|
@ -726,9 +723,6 @@ RDFGenericBuilderImpl::SetRootContent(nsIContent* aElement)
|
||||||
{
|
{
|
||||||
// flush (delete) the cache when re-rerooting the generated content
|
// flush (delete) the cache when re-rerooting the generated content
|
||||||
mCache = nsnull;
|
mCache = nsnull;
|
||||||
// and then re-create a new, empty cache
|
|
||||||
nsComponentManager::CreateInstance(kRDFInMemoryDataSourceCID,
|
|
||||||
nsnull, nsIRDFDataSource::GetIID(), (void **)&mCache);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -1212,8 +1206,17 @@ RDFGenericBuilderImpl::OnChange(nsIRDFResource* aSource,
|
||||||
|
|
||||||
if (mCache)
|
if (mCache)
|
||||||
{
|
{
|
||||||
|
if (aOldTarget)
|
||||||
|
{
|
||||||
|
// XXX fix this: in-memory DS doesn't like a null oldTarget
|
||||||
mCache->Change(aSource, aProperty, aOldTarget, aNewTarget);
|
mCache->Change(aSource, aProperty, aOldTarget, aNewTarget);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// XXX should get tv via observer interface
|
||||||
|
mCache->Assert(aSource, aProperty, aNewTarget, PR_TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsISupportsArray> elements;
|
nsCOMPtr<nsISupportsArray> elements;
|
||||||
rv = NS_NewISupportsArray(getter_AddRefs(elements));
|
rv = NS_NewISupportsArray(getter_AddRefs(elements));
|
||||||
|
@ -2063,8 +2066,14 @@ RDFGenericBuilderImpl::BuildContentFromTemplate(nsIContent *aTemplateNode,
|
||||||
rv = NS_ERROR_UNEXPECTED;
|
rv = NS_ERROR_UNEXPECTED;
|
||||||
|
|
||||||
if (gXULSortService && isResourceElement) {
|
if (gXULSortService && isResourceElement) {
|
||||||
rv = gXULSortService->InsertContainerNode(mDB, mCache,
|
nsCOMPtr<nsIRDFDataSource> tempCache = nsnull;
|
||||||
|
|
||||||
|
rv = gXULSortService->InsertContainerNode(mDB, getter_AddRefs(tempCache),
|
||||||
mRoot, trueParent, aRealNode, realKid, aNotify);
|
mRoot, trueParent, aRealNode, realKid, aNotify);
|
||||||
|
if (tempCache)
|
||||||
|
{
|
||||||
|
mCache = tempCache;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче