deactivate root focus controller as well as your own while deactivating yourself. bug 122462 / bugscape 11864 code=saari,myself r=bryner,hyatt

git-svn-id: svn://10.0.0.236/trunk@113151 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
danm%netscape.com 2002-01-29 21:42:07 +00:00
parent 83b13ed306
commit 1bc8d80e04
2 changed files with 29 additions and 19 deletions

View File

@ -1662,26 +1662,31 @@ NS_IMETHODIMP nsWebBrowser::Activate(void)
/* void deactivate (); */
NS_IMETHODIMP nsWebBrowser::Deactivate(void)
{
/* At this time we don't clear mWWatch's ActiveWindow; we just allow
the presumed other newly active window to set it when it comes in.
This seems harmless and maybe safer, but we have no real evidence
either way just yet. */
NS_ENSURE_STATE(mDocShell);
nsCOMPtr<nsIPresShell> presShell;
mDocShell->GetPresShell(getter_AddRefs(presShell));
if(!presShell)
return NS_OK;
nsCOMPtr<nsIDOMWindow> domWindow;
GetContentDOMWindow(getter_AddRefs(domWindow));
if (domWindow) {
nsCOMPtr<nsPIDOMWindow> privateDOMWindow = do_QueryInterface(domWindow);
if(privateDOMWindow)
privateDOMWindow->Deactivate();
}
/* At this time we don't clear mWWatch's ActiveWindow; we just allow
the presumed other newly active window to set it when it comes in.
This seems harmless and maybe safer, but we have no real evidence
either way just yet. */
NS_ENSURE_STATE(mDocShell);
nsCOMPtr<nsIPresShell> presShell;
mDocShell->GetPresShell(getter_AddRefs(presShell));
if(!presShell)
return NS_OK;
nsCOMPtr<nsIDOMWindow> domWindow;
GetContentDOMWindow(getter_AddRefs(domWindow));
if (domWindow) {
nsCOMPtr<nsPIDOMWindow> privateDOMWindow = do_QueryInterface(domWindow);
if(privateDOMWindow) {
nsCOMPtr<nsIFocusController> focusController;
privateDOMWindow->GetRootFocusController(getter_AddRefs(focusController));
if (focusController)
focusController->SetActive(PR_FALSE);
privateDOMWindow->Deactivate();
}
}
return NS_OK;
}
/* void setFocusAtFirstElement (); */

View File

@ -542,8 +542,13 @@ nsWebShellWindow::HandleEvent(nsGUIEvent *aEvent)
else */
if (domWindow) {
nsCOMPtr<nsPIDOMWindow> privateDOMWindow = do_QueryInterface(domWindow);
if(privateDOMWindow)
if(privateDOMWindow) {
nsCOMPtr<nsIFocusController> focusController;
privateDOMWindow->GetRootFocusController(getter_AddRefs(focusController));
if (focusController)
focusController->SetActive(PR_FALSE);
privateDOMWindow->Deactivate();
}
}
break;
}