diff --git a/mozilla/docshell/base/nsIDocShellTreeOwner.idl b/mozilla/docshell/base/nsIDocShellTreeOwner.idl index 0982ac782ba..9b251dd33f0 100644 --- a/mozilla/docshell/base/nsIDocShellTreeOwner.idl +++ b/mozilla/docshell/base/nsIDocShellTreeOwner.idl @@ -71,12 +71,18 @@ interface nsIDocShellTreeOwner : nsISupports */ void showModal(); - /* - Exit a modal loop if we're in one - @param aStatus - the result code to return from showModal - */ - void exitModalLoop(in nsresult aStatus); - + /** + Is the window modal (that is, currently executing a modal loop)? + @return true if it's a modal window + */ + boolean isModal(); + + /** + Exit a modal loop if we're in one + @param aStatus - the result code to return from showModal + */ + void exitModalLoop(in nsresult aStatus); + /* Tells the implementer of this interface to create a new window. This is a new logical window. Meaning in some implementations the result may not diff --git a/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp b/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp index 533ba3c824b..3df3b1a3254 100644 --- a/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp +++ b/mozilla/embedding/browser/webBrowser/nsDocShellTreeOwner.cpp @@ -250,6 +250,14 @@ NS_IMETHODIMP nsDocShellTreeOwner::ShowModal() return mWebBrowserChrome->ShowAsModal(); } +NS_IMETHODIMP nsDocShellTreeOwner::IsModal(PRBool *_retval) +{ + if(mTreeOwner) + return mTreeOwner->IsModal(_retval); + + return mWebBrowserChrome->IsWindowModal(_retval); +} + NS_IMETHODIMP nsDocShellTreeOwner::ExitModalLoop(nsresult aStatus) { if(mTreeOwner) diff --git a/mozilla/embedding/browser/webBrowser/nsIWebBrowserChrome.idl b/mozilla/embedding/browser/webBrowser/nsIWebBrowserChrome.idl index 7858870e918..c2987f348af 100644 --- a/mozilla/embedding/browser/webBrowser/nsIWebBrowserChrome.idl +++ b/mozilla/embedding/browser/webBrowser/nsIWebBrowserChrome.idl @@ -124,12 +124,18 @@ interface nsIWebBrowserChrome : nsISupports */ void showAsModal(); - /** - Exit a modal event loop if we're in one. The implementation - should also exit out of the loop if the window is destroyed. - @param aStatus - the result code to return from showAsModal - */ - void exitModalEventLoop(in nsresult aStatus); + /** + Is the window modal (that is, currently executing a modal loop)? + @return true if it's a modal window + */ + boolean isWindowModal(); + + /** + Exit a modal event loop if we're in one. The implementation + should also exit out of the loop if the window is destroyed. + @param aStatus - the result code to return from showAsModal + */ + void exitModalEventLoop(in nsresult aStatus); /* Sets the persistence of different dimensions of the window. diff --git a/mozilla/xpfe/appshell/src/nsChromeTreeOwner.cpp b/mozilla/xpfe/appshell/src/nsChromeTreeOwner.cpp index e58ddd13f92..48490edcc9f 100644 --- a/mozilla/xpfe/appshell/src/nsChromeTreeOwner.cpp +++ b/mozilla/xpfe/appshell/src/nsChromeTreeOwner.cpp @@ -181,6 +181,12 @@ NS_IMETHODIMP nsChromeTreeOwner::ShowModal() return mXULWindow->ShowModal(); } +NS_IMETHODIMP nsChromeTreeOwner::IsModal(PRBool *_retval) +{ + *_retval = mXULWindow->mContinueModalLoop; + return NS_OK; +} + NS_IMETHODIMP nsChromeTreeOwner::ExitModalLoop(nsresult aStatus) { return mXULWindow->ExitModalLoop(aStatus); diff --git a/mozilla/xpfe/appshell/src/nsContentTreeOwner.cpp b/mozilla/xpfe/appshell/src/nsContentTreeOwner.cpp index b91e3e55cc0..9bbb8985cff 100644 --- a/mozilla/xpfe/appshell/src/nsContentTreeOwner.cpp +++ b/mozilla/xpfe/appshell/src/nsContentTreeOwner.cpp @@ -183,6 +183,12 @@ NS_IMETHODIMP nsContentTreeOwner::ShowModal() return mXULWindow->ShowModal(); } +NS_IMETHODIMP nsContentTreeOwner::IsModal(PRBool *_retval) +{ + *_retval = mXULWindow->mContinueModalLoop; + return NS_OK; +} + NS_IMETHODIMP nsContentTreeOwner::ExitModalLoop(nsresult aStatus) { return mXULWindow->ExitModalLoop(aStatus); @@ -283,6 +289,11 @@ NS_IMETHODIMP nsContentTreeOwner::ShowAsModal() return ShowModal(); } +NS_IMETHODIMP nsContentTreeOwner::IsWindowModal(PRBool *_retval) +{ + return IsModal(_retval); +} + NS_IMETHODIMP nsContentTreeOwner::ExitModalEventLoop(nsresult aStatus) { return ExitModalLoop(aStatus);