diff --git a/xpfe/appshell/src/nsContentTreeOwner.cpp b/xpfe/appshell/src/nsContentTreeOwner.cpp index 2e1430165179..76937d6638a5 100644 --- a/xpfe/appshell/src/nsContentTreeOwner.cpp +++ b/xpfe/appshell/src/nsContentTreeOwner.cpp @@ -40,7 +40,8 @@ static NS_DEFINE_CID(kWindowMediatorCID, NS_WINDOWMEDIATOR_CID); //*** nsContentTreeOwner: Object Management //***************************************************************************** -nsContentTreeOwner::nsContentTreeOwner() : mXULWindow(nsnull) +nsContentTreeOwner::nsContentTreeOwner(PRBool fPrimary) : mXULWindow(nsnull), + mPrimary(fPrimary) { NS_INIT_REFCNT(); } @@ -306,6 +307,10 @@ NS_IMETHODIMP nsContentTreeOwner::GetTitle(PRUnichar** aTitle) NS_IMETHODIMP nsContentTreeOwner::SetTitle(const PRUnichar* aTitle) { + // We only allow the title to be set from the primary content shell + if(!mPrimary) + return NS_OK; + // Get the window title modifiers nsCOMPtr docShellElement; mXULWindow->GetDOMElementFromDocShell(mXULWindow->mDocShell, diff --git a/xpfe/appshell/src/nsContentTreeOwner.h b/xpfe/appshell/src/nsContentTreeOwner.h index b445d1aa9995..80f498123ed4 100644 --- a/xpfe/appshell/src/nsContentTreeOwner.h +++ b/xpfe/appshell/src/nsContentTreeOwner.h @@ -41,7 +41,7 @@ public: NS_DECL_NSIDOCSHELLTREEOWNER protected: - nsContentTreeOwner(); + nsContentTreeOwner(PRBool fPrimary); virtual ~nsContentTreeOwner(); void XULWindow(nsXULWindow* aXULWindow); @@ -49,6 +49,7 @@ protected: protected: nsXULWindow* mXULWindow; + PRBool mPrimary; }; #endif /* nsContentTreeOwner_h__ */ diff --git a/xpfe/appshell/src/nsXULWindow.cpp b/xpfe/appshell/src/nsXULWindow.cpp index ce4229b7a053..39fdff374990 100644 --- a/xpfe/appshell/src/nsXULWindow.cpp +++ b/xpfe/appshell/src/nsXULWindow.cpp @@ -46,8 +46,9 @@ static NS_DEFINE_CID(kWindowMediatorCID, NS_WINDOWMEDIATOR_CID); //*** nsXULWindow: Object Management //***************************************************************************** -nsXULWindow::nsXULWindow() : mContentTreeOwner(nsnull), - mChromeTreeOwner(nsnull) +nsXULWindow::nsXULWindow() : mChromeTreeOwner(nsnull), + mContentTreeOwner(nsnull), mPrimaryContentTreeOwner(nsnull) + { NS_INIT_REFCNT(); } @@ -260,6 +261,11 @@ NS_IMETHODIMP nsXULWindow::Destroy() mContentTreeOwner->XULWindow(nsnull); NS_RELEASE(mContentTreeOwner); } + if(mPrimaryContentTreeOwner) + { + mPrimaryContentTreeOwner->XULWindow(nsnull); + NS_RELEASE(mPrimaryContentTreeOwner); + } if(mChromeTreeOwner) { mChromeTreeOwner->XULWindow(nsnull); @@ -461,7 +467,7 @@ NS_IMETHODIMP nsXULWindow::EnsureContentTreeOwner() if(mContentTreeOwner) return NS_OK; - mContentTreeOwner = new nsContentTreeOwner(); + mContentTreeOwner = new nsContentTreeOwner(PR_FALSE); NS_ENSURE_TRUE(mContentTreeOwner, NS_ERROR_FAILURE); NS_ADDREF(mContentTreeOwner); @@ -470,6 +476,20 @@ NS_IMETHODIMP nsXULWindow::EnsureContentTreeOwner() return NS_OK; } +NS_IMETHODIMP nsXULWindow::EnsurePrimaryContentTreeOwner() +{ + if(mPrimaryContentTreeOwner) + return NS_OK; + + mPrimaryContentTreeOwner = new nsContentTreeOwner(PR_TRUE); + NS_ENSURE_TRUE(mPrimaryContentTreeOwner, NS_ERROR_FAILURE); + + NS_ADDREF(mPrimaryContentTreeOwner); + mPrimaryContentTreeOwner->XULWindow(this); + + return NS_OK; +} + NS_IMETHODIMP nsXULWindow::GetDOMElementFromDocShell(nsIDocShell* aDocShell, nsIDOMElement** aDOMElement) { @@ -572,8 +592,16 @@ NS_IMETHODIMP nsXULWindow::ContentShellAdded(nsIDocShellTreeItem* aContentShell, if(!treeOwner) { - NS_ENSURE_SUCCESS(EnsureContentTreeOwner(), NS_ERROR_FAILURE); - aContentShell->SetTreeOwner(mContentTreeOwner); + if(aPrimary) + { + NS_ENSURE_SUCCESS(EnsurePrimaryContentTreeOwner(), NS_ERROR_FAILURE); + aContentShell->SetTreeOwner(mPrimaryContentTreeOwner); + } + else + { + NS_ENSURE_SUCCESS(EnsureContentTreeOwner(), NS_ERROR_FAILURE); + aContentShell->SetTreeOwner(mContentTreeOwner); + } } return NS_OK; diff --git a/xpfe/appshell/src/nsXULWindow.h b/xpfe/appshell/src/nsXULWindow.h index 82c745c0404b..9814fd345214 100644 --- a/xpfe/appshell/src/nsXULWindow.h +++ b/xpfe/appshell/src/nsXULWindow.h @@ -58,6 +58,7 @@ protected: NS_IMETHOD EnsureChromeTreeOwner(); NS_IMETHOD EnsureContentTreeOwner(); + NS_IMETHOD EnsurePrimaryContentTreeOwner(); NS_IMETHOD GetDOMElementFromDocShell(nsIDocShell* aDocShell, nsIDOMElement** aDOMElement); @@ -68,6 +69,7 @@ protected: protected: nsChromeTreeOwner* mChromeTreeOwner; nsContentTreeOwner* mContentTreeOwner; + nsContentTreeOwner* mPrimaryContentTreeOwner; nsCOMPtr mWindow; nsCOMPtr mDocShell; nsVoidArray mContentShells;