From: mjs Date: Fri, 10 Dec 2004 23:15:35 +0000 (+0000) Subject: Reviewed by Richard. X-Git-Url: https://git.webkit.org/?p=WebKit-https.git;a=commitdiff_plain;h=2d9c83506e453bb48923455902bfb93959434516 Reviewed by Richard. REGRESSION (125-173): crash when KWQTextField is dealloc'ed while setting focus (profoundlearning.com) * kwq/KWQWidget.mm: (QWidget::setFocus): Handle the case where setting focus removed us from the superview - this can happen due to style changes on focus change. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8191 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23 index 7f92126b27eb..3b1e5d18ff00 100644 --- a/WebCore/ChangeLog-2005-08-23 +++ b/WebCore/ChangeLog-2005-08-23 @@ -1,3 +1,14 @@ +2004-12-10 Maciej Stachowiak + + Reviewed by Richard. + + REGRESSION (125-173): crash when KWQTextField is dealloc'ed while setting focus (profoundlearning.com) + + * kwq/KWQWidget.mm: + (QWidget::setFocus): Handle the case where setting focus removed + us from the superview - this can happen due to style changes on + focus change. + 2004-12-10 Ken Kocienda Reviewed by Hyatt diff --git a/WebCore/kwq/KWQWidget.mm b/WebCore/kwq/KWQWidget.mm index 7d6d16b8bf2e..3b77a97c86c0 100644 --- a/WebCore/kwq/KWQWidget.mm +++ b/WebCore/kwq/KWQWidget.mm @@ -235,7 +235,19 @@ void QWidget::setFocus() KWQ_BLOCK_EXCEPTIONS; if ([view acceptsFirstResponder]) { - [KWQKHTMLPart::bridgeForWidget(this) makeFirstResponder:view]; + WebCoreBridge *bridge = KWQKHTMLPart::bridgeForWidget(this); + NSResponder *oldFirstResponder = [bridge firstResponder]; + + [bridge makeFirstResponder:view]; + + // setting focus can actually cause a style change which might + // remove the view from its superview while it's being made + // first responder. This confuses AppKit so we must restore + // the old first responder. + + if (![view superview]) { + [bridge makeFirstResponder:oldFirstResponder]; + } } KWQ_UNBLOCK_EXCEPTIONS; }