From 2a54adef480e4847ef0a7177946d64e46ef32efd Mon Sep 17 00:00:00 2001 From: "danm%netscape.com" Date: Wed, 6 Feb 2002 02:05:19 +0000 Subject: [PATCH] stifle infinite focus/activation recursion in windows with onfocus handlers that activate the window. bugscape bug 12000 r=hyatt,jst,gustavoverdun a=valeski git-svn-id: svn://10.0.0.236/branches/MOZILLA_0_9_4_BRANCH@113736 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/embedding/browser/webBrowser/nsWebBrowser.cpp | 11 ++++++++++- mozilla/embedding/browser/webBrowser/nsWebBrowser.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/mozilla/embedding/browser/webBrowser/nsWebBrowser.cpp b/mozilla/embedding/browser/webBrowser/nsWebBrowser.cpp index cb60a5536f5..70225ad54a1 100644 --- a/mozilla/embedding/browser/webBrowser/nsWebBrowser.cpp +++ b/mozilla/embedding/browser/webBrowser/nsWebBrowser.cpp @@ -74,7 +74,7 @@ static NS_DEFINE_IID(kDeviceContextCID, NS_DEVICE_CONTEXT_CID); //***************************************************************************** nsWebBrowser::nsWebBrowser() : mDocShellTreeOwner(nsnull), - mInitInfo(nsnull), mContentType(typeContentWrapper), + mInitInfo(nsnull), mContentType(typeContentWrapper), mActivating(PR_FALSE), mParentNativeWindow(nsnull), mParentWidget(nsnull), mParent(nsnull), mProgressListener(nsnull), mListenerArray(nsnull), mBackgroundColor(0) @@ -1400,6 +1400,11 @@ NS_IMETHODIMP nsWebBrowser::GetPrimaryContentWindow(nsIDOMWindowInternal **aDOMW /* void activate (); */ NS_IMETHODIMP nsWebBrowser::Activate(void) { + // stop infinite recursion from windows with onfocus handlers that + // reactivate the window + if (mActivating) + return NS_OK; + // try to set focus on the last focused window as stored in the // focus controller object. nsCOMPtr domWindowExternal; @@ -1413,6 +1418,9 @@ NS_IMETHODIMP nsWebBrowser::Activate(void) if (!piWin) { return NS_ERROR_FAILURE; } + + mActivating = PR_TRUE; + piWin->GetRootFocusController(getter_AddRefs(focusController)); PRBool needToFocus = PR_TRUE; if (focusController) { @@ -1464,6 +1472,7 @@ NS_IMETHODIMP nsWebBrowser::Activate(void) } } + mActivating = PR_FALSE; return NS_OK; } diff --git a/mozilla/embedding/browser/webBrowser/nsWebBrowser.h b/mozilla/embedding/browser/webBrowser/nsWebBrowser.h index 102a3f4ffc3..5e332634092 100644 --- a/mozilla/embedding/browser/webBrowser/nsWebBrowser.h +++ b/mozilla/embedding/browser/webBrowser/nsWebBrowser.h @@ -134,6 +134,7 @@ protected: nsCOMPtr mWWatch; nsWebBrowserInitInfo* mInitInfo; PRUint32 mContentType; + PRBool mActivating; nativeWindow mParentNativeWindow; nsIWebBrowserPersistProgress *mProgressListener; nsCOMPtr mWebProgress;