зеркало из https://github.com/mozilla/pjs.git
Fix regression caused by and bug unmasked by bug 373122 patch (display
problem and keyboard focus problems). b=384343+383821 r=josh sr=roc
This commit is contained in:
Родитель
322ea3207c
Коммит
8c4e0de81b
|
@ -3785,13 +3785,14 @@ static PRBool IsSpecialGeckoKey(UInt32 macKeyCode)
|
||||||
|
|
||||||
|
|
||||||
// This method is called when are are about to lose focus.
|
// This method is called when are are about to lose focus.
|
||||||
|
// We must always call through to our superclass, even when mGeckoChild is
|
||||||
|
// nil -- otherwise the keyboard focus can end up in the wrong NSView.
|
||||||
- (BOOL)resignFirstResponder
|
- (BOOL)resignFirstResponder
|
||||||
{
|
{
|
||||||
if (!mGeckoChild)
|
if (mGeckoChild) {
|
||||||
return NO;
|
nsFocusEvent event(PR_TRUE, NS_LOSTFOCUS, mGeckoChild);
|
||||||
|
mGeckoChild->DispatchWindowEvent(event);
|
||||||
nsFocusEvent event(PR_TRUE, NS_LOSTFOCUS, mGeckoChild);
|
}
|
||||||
mGeckoChild->DispatchWindowEvent(event);
|
|
||||||
|
|
||||||
return [super resignFirstResponder];
|
return [super resignFirstResponder];
|
||||||
}
|
}
|
||||||
|
@ -3834,16 +3835,18 @@ static PRBool IsSpecialGeckoKey(UInt32 macKeyCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// If the call to removeFromSuperviewWithoutNeedingDisplay isn't delayed from
|
// If the call to removeFromSuperview isn't delayed from nsChildView::
|
||||||
// nsChildView::TearDownView(), the NSView hierarchy might get changed during
|
// TearDownView(), the NSView hierarchy might get changed during calls to
|
||||||
// calls to [ChildView drawRect:], which leads to "beyond bounds" exceptions
|
// [ChildView drawRect:], which leads to "beyond bounds" exceptions in
|
||||||
// in NSCFArray. For more info see bmo bug 373122. Apple's docs claim that
|
// NSCFArray. For more info see bmo bug 373122. Apple's docs claim that
|
||||||
// removeFromSuperviewWithoutNeedingDisplay "can be safely invoked during
|
// removeFromSuperviewWithoutNeedingDisplay "can be safely invoked during
|
||||||
// display" (whatever "display" means). But it's _not_ true that it can be
|
// display" (whatever "display" means). But it's _not_ true that it can be
|
||||||
// safely invoked during calls to [NSView drawRect:].
|
// safely invoked during calls to [NSView drawRect:]. We use
|
||||||
|
// removeFromSuperview here because there's no longer any danger of being
|
||||||
|
// "invoked during display", and because doing do clears up bmo bug 384343.
|
||||||
- (void)delayedTearDown
|
- (void)delayedTearDown
|
||||||
{
|
{
|
||||||
[self removeFromSuperviewWithoutNeedingDisplay];
|
[self removeFromSuperview];
|
||||||
[self release];
|
[self release];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче