diff --git a/chrome/public/nsIChromeRegistry.idl b/chrome/public/nsIChromeRegistry.idl index b276c856a94a..f40feb06f57d 100644 --- a/chrome/public/nsIChromeRegistry.idl +++ b/chrome/public/nsIChromeRegistry.idl @@ -86,6 +86,8 @@ interface nsIChromeRegistry : nsISupports void installPackage(in string baseURL, in boolean useProfile); void uninstallPackage(in wstring packageName, in boolean useProfile); + + void getBackstopSheets(out nsISupportsArray styleSheets); }; diff --git a/chrome/src/nsChromeRegistry.cpp b/chrome/src/nsChromeRegistry.cpp index c9137661764c..00436dda6561 100644 --- a/chrome/src/nsChromeRegistry.cpp +++ b/chrome/src/nsChromeRegistry.cpp @@ -69,6 +69,7 @@ #include "nsINameSpaceManager.h" #include "nsIIOService.h" #include "nsIResProtocolHandler.h" +#include "nsLayoutCID.h" static char kChromePrefix[] = "chrome://"; @@ -76,6 +77,7 @@ static NS_DEFINE_CID(kWindowMediatorCID, NS_WINDOWMEDIATOR_CID); static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID); static NS_DEFINE_CID(kRDFXMLDataSourceCID, NS_RDFXMLDATASOURCE_CID); static NS_DEFINE_CID(kRDFContainerUtilsCID, NS_RDFCONTAINERUTILS_CID); +static NS_DEFINE_CID(kCSSLoaderCID, NS_CSS_LOADER_CID); class nsChromeRegistry; @@ -381,6 +383,9 @@ nsChromeRegistry::ConvertChromeURL(nsIURI* aChromeURL) if (NS_SUCCEEDED(rv)) { mInstallInitialized = PR_TRUE; AddToCompositeDataSource(PR_FALSE); + + LoadStyleSheet(getter_AddRefs(mScrollbarSheet), "chrome://global/skin/scrollbars.css"); + // This must always be the last line of install initialization! } } @@ -393,6 +398,15 @@ nsChromeRegistry::ConvertChromeURL(nsIURI* aChromeURL) mProfileInitialized = PR_TRUE; mChromeDataSource = nsnull; AddToCompositeDataSource(PR_TRUE); + + LoadStyleSheet(getter_AddRefs(mScrollbarSheet), "chrome://global/skin/scrollbars.css"); + // This must always be the last line of profile initialization! + + nsCAutoString userSheetURL; + GetUserSheetURL(userSheetURL); + if(!userSheetURL.IsEmpty()) { + LoadStyleSheet(getter_AddRefs(mUserSheet), userSheetURL); + } } } @@ -1030,6 +1044,9 @@ NS_IMETHODIMP nsChromeRegistry::SetProvider(const nsCAutoString& aProvider, arcs->HasMoreElements(&more); } + if(aProvider.Equals("skin")){ + LoadStyleSheet(getter_AddRefs(mScrollbarSheet), "chrome://global/skin/scrollbars.css"); + } return NS_OK; } @@ -1585,6 +1602,51 @@ nsChromeRegistry::AddToCompositeDataSource(PRBool aUseProfile) return NS_OK; } +NS_IMETHODIMP +nsChromeRegistry::GetBackstopSheets(nsISupportsArray **aResult) +{ + if(mScrollbarSheet || mUserSheet) + { + NS_NewISupportsArray(aResult); + if(mScrollbarSheet) + (*aResult)->AppendElement(mScrollbarSheet); + + if(mUserSheet) + (*aResult)->AppendElement(mUserSheet); + } + return NS_OK; +} + +void nsChromeRegistry::LoadStyleSheet(nsICSSStyleSheet** aSheet, const nsCString& aURL) +{ + // Load scrollbar style sheet + nsresult rv; + + nsCOMPtr loader; + rv = nsComponentManager::CreateInstance(kCSSLoaderCID, + nsnull, + NS_GET_IID(nsICSSLoader), + getter_AddRefs(loader)); + if(loader) { + nsCOMPtr url; + rv = nsComponentManager::CreateInstance("component://netscape/network/standard-url", + nsnull, + NS_GET_IID(nsIURL), + getter_AddRefs(url)); + if(url) { + url->SetSpec(aURL); + PRBool complete; + rv = loader->LoadAgentSheet(url, *aSheet, complete, + nsnull); + } + } +} + +void nsChromeRegistry::GetUserSheetURL(nsCString & aURL) +{ + aURL = mProfileRoot + "user.css"; +} + ////////////////////////////////////////////////////////////////////// nsresult diff --git a/chrome/src/nsChromeRegistry.h b/chrome/src/nsChromeRegistry.h index 7fb142c715fa..ca495f14a47b 100644 --- a/chrome/src/nsChromeRegistry.h +++ b/chrome/src/nsChromeRegistry.h @@ -35,6 +35,7 @@ class nsIDOMWindow; class nsIDocument; #include "nsIRDFCompositeDataSource.h" +#include "nsICSSStyleSheet.h" class nsChromeRegistry : public nsIChromeRegistry { @@ -63,6 +64,9 @@ protected: nsAutoString aProvider, nsIRDFContainer *aContainer, nsIRDFDataSource *aDataSource); + + void LoadStyleSheet(nsICSSStyleSheet** aSheet, const nsCString & aURL); + void GetUserSheetURL(nsCString & aURL); private: NS_IMETHOD ReallyRemoveOverlayFromDataSource(const PRUnichar *aDocURI, char *aOverlayURI); @@ -127,4 +131,8 @@ protected: nsCOMPtr mBaseURL; nsCOMPtr mPackages; nsCOMPtr mPackage; + + // Style Sheets + nsCOMPtr mScrollbarSheet; + nsCOMPtr mUserSheet; }; diff --git a/rdf/chrome/public/nsIChromeRegistry.idl b/rdf/chrome/public/nsIChromeRegistry.idl index b276c856a94a..f40feb06f57d 100644 --- a/rdf/chrome/public/nsIChromeRegistry.idl +++ b/rdf/chrome/public/nsIChromeRegistry.idl @@ -86,6 +86,8 @@ interface nsIChromeRegistry : nsISupports void installPackage(in string baseURL, in boolean useProfile); void uninstallPackage(in wstring packageName, in boolean useProfile); + + void getBackstopSheets(out nsISupportsArray styleSheets); }; diff --git a/rdf/chrome/src/nsChromeRegistry.cpp b/rdf/chrome/src/nsChromeRegistry.cpp index c9137661764c..00436dda6561 100644 --- a/rdf/chrome/src/nsChromeRegistry.cpp +++ b/rdf/chrome/src/nsChromeRegistry.cpp @@ -69,6 +69,7 @@ #include "nsINameSpaceManager.h" #include "nsIIOService.h" #include "nsIResProtocolHandler.h" +#include "nsLayoutCID.h" static char kChromePrefix[] = "chrome://"; @@ -76,6 +77,7 @@ static NS_DEFINE_CID(kWindowMediatorCID, NS_WINDOWMEDIATOR_CID); static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID); static NS_DEFINE_CID(kRDFXMLDataSourceCID, NS_RDFXMLDATASOURCE_CID); static NS_DEFINE_CID(kRDFContainerUtilsCID, NS_RDFCONTAINERUTILS_CID); +static NS_DEFINE_CID(kCSSLoaderCID, NS_CSS_LOADER_CID); class nsChromeRegistry; @@ -381,6 +383,9 @@ nsChromeRegistry::ConvertChromeURL(nsIURI* aChromeURL) if (NS_SUCCEEDED(rv)) { mInstallInitialized = PR_TRUE; AddToCompositeDataSource(PR_FALSE); + + LoadStyleSheet(getter_AddRefs(mScrollbarSheet), "chrome://global/skin/scrollbars.css"); + // This must always be the last line of install initialization! } } @@ -393,6 +398,15 @@ nsChromeRegistry::ConvertChromeURL(nsIURI* aChromeURL) mProfileInitialized = PR_TRUE; mChromeDataSource = nsnull; AddToCompositeDataSource(PR_TRUE); + + LoadStyleSheet(getter_AddRefs(mScrollbarSheet), "chrome://global/skin/scrollbars.css"); + // This must always be the last line of profile initialization! + + nsCAutoString userSheetURL; + GetUserSheetURL(userSheetURL); + if(!userSheetURL.IsEmpty()) { + LoadStyleSheet(getter_AddRefs(mUserSheet), userSheetURL); + } } } @@ -1030,6 +1044,9 @@ NS_IMETHODIMP nsChromeRegistry::SetProvider(const nsCAutoString& aProvider, arcs->HasMoreElements(&more); } + if(aProvider.Equals("skin")){ + LoadStyleSheet(getter_AddRefs(mScrollbarSheet), "chrome://global/skin/scrollbars.css"); + } return NS_OK; } @@ -1585,6 +1602,51 @@ nsChromeRegistry::AddToCompositeDataSource(PRBool aUseProfile) return NS_OK; } +NS_IMETHODIMP +nsChromeRegistry::GetBackstopSheets(nsISupportsArray **aResult) +{ + if(mScrollbarSheet || mUserSheet) + { + NS_NewISupportsArray(aResult); + if(mScrollbarSheet) + (*aResult)->AppendElement(mScrollbarSheet); + + if(mUserSheet) + (*aResult)->AppendElement(mUserSheet); + } + return NS_OK; +} + +void nsChromeRegistry::LoadStyleSheet(nsICSSStyleSheet** aSheet, const nsCString& aURL) +{ + // Load scrollbar style sheet + nsresult rv; + + nsCOMPtr loader; + rv = nsComponentManager::CreateInstance(kCSSLoaderCID, + nsnull, + NS_GET_IID(nsICSSLoader), + getter_AddRefs(loader)); + if(loader) { + nsCOMPtr url; + rv = nsComponentManager::CreateInstance("component://netscape/network/standard-url", + nsnull, + NS_GET_IID(nsIURL), + getter_AddRefs(url)); + if(url) { + url->SetSpec(aURL); + PRBool complete; + rv = loader->LoadAgentSheet(url, *aSheet, complete, + nsnull); + } + } +} + +void nsChromeRegistry::GetUserSheetURL(nsCString & aURL) +{ + aURL = mProfileRoot + "user.css"; +} + ////////////////////////////////////////////////////////////////////// nsresult diff --git a/rdf/chrome/src/nsChromeRegistry.h b/rdf/chrome/src/nsChromeRegistry.h index 7fb142c715fa..ca495f14a47b 100644 --- a/rdf/chrome/src/nsChromeRegistry.h +++ b/rdf/chrome/src/nsChromeRegistry.h @@ -35,6 +35,7 @@ class nsIDOMWindow; class nsIDocument; #include "nsIRDFCompositeDataSource.h" +#include "nsICSSStyleSheet.h" class nsChromeRegistry : public nsIChromeRegistry { @@ -63,6 +64,9 @@ protected: nsAutoString aProvider, nsIRDFContainer *aContainer, nsIRDFDataSource *aDataSource); + + void LoadStyleSheet(nsICSSStyleSheet** aSheet, const nsCString & aURL); + void GetUserSheetURL(nsCString & aURL); private: NS_IMETHOD ReallyRemoveOverlayFromDataSource(const PRUnichar *aDocURI, char *aOverlayURI); @@ -127,4 +131,8 @@ protected: nsCOMPtr mBaseURL; nsCOMPtr mPackages; nsCOMPtr mPackage; + + // Style Sheets + nsCOMPtr mScrollbarSheet; + nsCOMPtr mUserSheet; }; diff --git a/xpfe/global/resources/skin/xul.css b/xpfe/global/resources/skin/xul.css index cdb21b3c0621..cae89fb81cea 100644 --- a/xpfe/global/resources/skin/xul.css +++ b/xpfe/global/resources/skin/xul.css @@ -6,8 +6,6 @@ CHANGES REVIEWED BY hyatt@netscape.com. **/ -@import url(chrome://global/skin/scrollbars.css); - @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); /* set default namespace to XUL */ @namespace html url("http://www.w3.org/TR/REC-html40"); /* namespace for HTML elements */