Reviewed by Richard.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Dec 2004 23:15:35 +0000 (23:15 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Dec 2004 23:15:35 +0000 (23:15 +0000)
<rdar://problem/3907484> 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

WebCore/ChangeLog-2005-08-23
WebCore/kwq/KWQWidget.mm

index 7f92126b27eb651962ffe629298fe658ed135249..3b1e5d18ff00b8cd667824a4b3855862cf6ce0ba 100644 (file)
@@ -1,3 +1,14 @@
+2004-12-10  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Richard.
+
+       <rdar://problem/3907484> 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  <kocienda@apple.com>
 
         Reviewed by Hyatt
index 7d6d16b8bf2e5f37a7387680ccfe285e896b687c..3b77a97c86c0635f7f9c41cf78d88f58a7f2f50d 100644 (file)
@@ -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;
 }