Reviewed by Richard
authorkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Jul 2004 20:58:08 +0000 (20:58 +0000)
committerkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Jul 2004 20:58:08 +0000 (20:58 +0000)
        Fix for this bug:

        <rdar://problem/3707504> HTMLCompose: key events are stolen by Web(HTML)View

        * Misc.subproj/WebNSViewExtras.h:
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView firstResponderIsSelfOrDescendantView]): New helper to
        (-[WebHTMLView performKeyEquivalent:]): Do not pass key events through to the editing
        key handler unless the WebHTMLView is first responder or contains the first responder.
        This prevents the "stealing" of key events mentioned in the bug.
        * WebView.subproj/WebView.m:
        (-[WebView _performResponderOperation:with:]): Uses the new firstResponderIsSelfOrDescendantView
        helper. The code I replaced used the same logic as the new helper.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@7051 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/ChangeLog
WebKit/Misc.subproj/WebNSViewExtras.h
WebKit/Misc.subproj/WebNSViewExtras.m
WebKit/WebView.subproj/WebHTMLView.m
WebKit/WebView.subproj/WebView.m

index f964c16d891aa4a146ddc176dc1cecaa42870d33..385c4cac8678c2802285eb15a008b5559890f268 100644 (file)
@@ -1,3 +1,21 @@
+2004-07-19  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by Richard
+
+        Fix for this bug:
+        
+        <rdar://problem/3707504> HTMLCompose: key events are stolen by Web(HTML)View
+
+        * Misc.subproj/WebNSViewExtras.h:
+        * Misc.subproj/WebNSViewExtras.m:
+        (-[NSView firstResponderIsSelfOrDescendantView]): New helper to 
+        (-[WebHTMLView performKeyEquivalent:]): Do not pass key events through to the editing
+        key handler unless the WebHTMLView is first responder or contains the first responder.
+        This prevents the "stealing" of key events mentioned in the bug.
+        * WebView.subproj/WebView.m:
+        (-[WebView _performResponderOperation:with:]): Uses the new firstResponderIsSelfOrDescendantView
+        helper. The code I replaced used the same logic as the new helper.
+
 === Safari-152 ===
 
 2004-07-12  Maciej Stachowiak  <mjs@apple.com>
index a456abdf46237c94cad7d791dea125fa29cd4911..e3853103e66ab4100579218ea0c4b03017164588 100644 (file)
@@ -48,4 +48,6 @@
                 source:(id)source
                 offset:(NSPoint *)dragImageOffset;
 
+- (BOOL)firstResponderIsSelfOrDescendantView;
+
 @end
index 47430a1df91abff01020acd7db38298299666ca1..c40ced6cc93571504ee9e46b1df0aa9331c96982 100644 (file)
     [self dragImage:dragImage at:origin offset:NSZeroSize event:event pasteboard:pasteboard source:source slideBack:YES];
 }
 
+- (BOOL)firstResponderIsSelfOrDescendantView
+{
+    NSResponder *responder = [[self window] firstResponder];
+    return (responder && 
+           (responder == self || 
+           ([responder isKindOfClass:[NSView class]] && [(NSView *)responder isDescendantOf:self])));
+}
+
 @end
index a428f1f79e72c4fcf9624a74ce1021faa49bc80c..2eb393fc467d8731c59c88e7aba589d785b81b3a 100644 (file)
@@ -2259,7 +2259,7 @@ static WebHTMLView *lastHitView = nil;
     // at intercepting command-modified keypresses now. If this turns out to cause havoc we
     // can restrict this to only send the event through WebCore if it contains the Return or
     // Enter key.
-    if ([[self _bridge] interceptKeyEvent:event toView:self]) {
+    if ([self firstResponderIsSelfOrDescendantView] && [[self _bridge] interceptKeyEvent:event toView:self]) {
         return YES;
     }
 
index efe7af5c89ee0d467502f8a5bc15adc85dd803cd..dbd7bfcfb852c7a6c093808a1b466a289b3e3194 100644 (file)
@@ -2594,7 +2594,7 @@ static WebFrame *incrementFrame(WebFrame *curr, BOOL forward, BOOL wrapFlag)
 
     // Pass this selector down to the first responder.
     NSResponder *responder = [[self window] firstResponder];
-    if (!responder || ![responder isKindOfClass:[NSView class]] || ![(NSView *)responder isDescendantOf:self]) {
+    if (![self firstResponderIsSelfOrDescendantView]) {
         responder = [[[self mainFrame] frameView] documentView];
         if (!responder) {
             responder = [[self mainFrame] frameView];