Aqua focus ring is cut off after form autocomplete goes away, second pass. Includes some code by hwaara from bug 392813. b=417124 r=hwaara sr=roc

This commit is contained in:
joshmoz@gmail.com 2008-02-18 17:11:39 -08:00
parent 32d2475f88
commit 8697bb3a1a

View File

@ -413,7 +413,7 @@ nsresult nsCocoaWindow::StandardCreate(nsIWidget *aParent,
}
else {
mWindow = (NSWindow*)aNativeWindow;
mVisible = PR_TRUE;
mVisible = [mWindow isVisible];
}
return NS_OK;
@ -509,6 +509,9 @@ NS_IMETHODIMP nsCocoaWindow::SetModal(PRBool aState)
// Hide or show this window
NS_IMETHODIMP nsCocoaWindow::Show(PRBool bState)
{
if (mVisible == bState)
return NS_OK;
nsIWidget* parentWidget = mParent;
nsCOMPtr<nsPIWidgetCocoa> piParentWidget(do_QueryInterface(parentWidget));
NSWindow* nativeParentWindow = (parentWidget) ?
@ -678,8 +681,22 @@ NS_IMETHODIMP nsCocoaWindow::Show(PRBool bState)
// the NSApplication class (in header files generated using class-dump).
// This workaround was "borrowed" from the Java Embedding Plugin (which
// uses it for a different purpose).
if (mWindowType == eWindowType_popup)
if (mWindowType == eWindowType_popup) {
[NSApp _removeWindowFromCache:mWindow];
// Apple's focus ring APIs sometimes clip themselves when they draw under
// other windows. Redraw the window that was likely under the popup to
// get focus rings to draw correctly. Sometimes the window is not properly
// the parent of the popup, so we can't just tell the parent to redraw.
// We only have this problem on 10.4. See bug 417124.
if (!nsToolkit::OnLeopardOrLater()) {
NSWindow* keyWindow = [NSApp keyWindow];
if (keyWindow)
[keyWindow display];
NSWindow* mainWindow = [NSApp mainWindow];
if (mainWindow && mainWindow != keyWindow)
[mainWindow display];
}
}
// it's very important to turn off mouse moved events when hiding a window, otherwise
// the windows' tracking rects will interfere with each other. (bug 356528)