Tests:
authorkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 2 Aug 2004 18:38:57 +0000 (18:38 +0000)
committerkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 2 Aug 2004 18:38:57 +0000 (18:38 +0000)
        Reviewed by John

        Remove special code that placed the caret when the document loads.
        This is now handled by WebKit in a more generalized way.

        * Blot/Blot.xcode/project.pbxproj:
        * Blot/BlotDocument.m:
        (-[BlotDocument webView:didFinishLoadForFrame:]):

WebKit:

        Reviewed by John

        Update name of firstResponderIsSelfOrDescendantView, adding _web_ prefix to this SPI call.

        Do some work to make caret blinking in newly-created editable WebView's that are
        similar in structure to Blot more "automatic".

        * Misc.subproj/WebNSViewExtras.h: Change name of firstResponderIsSelfOrDescendantView. Add _web_ prefix.
        * Misc.subproj/WebNSViewExtras.m:
        (-[NSView _web_firstResponderIsSelfOrDescendantView]): Name change.
        (-[NSView _web_firstResponderCausesFocusDisplay]): Adds an additional check for whether the view's
        is first responder. This helps to make the focus setting in viewDidMoveToWindow work right.
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView updateFocusDisplay]): Use _web_firstResponderCausesFocusDisplay now instead of
        firstResponderIsSelfOrDescendantView.
        (-[WebHTMLView viewDidMoveToWindow]): Schedule call to updateFocusDisplay for the next crank of the
        run loop. The reason is that placing the caret in the just-installed view requires the HTML/XML
        document to be available on the WebCore side, but it is not at the time this code is running.
        However, it will be there on the next crank of the run loop. Doing this helps to make a
        blinking caret appear in a new, empty window "automatic".
        (-[WebHTMLView performKeyEquivalent:]):  _web_firstResponderIsSelfOrDescendantView name change.
        * WebView.subproj/WebView.m:
        (-[WebView _performResponderOperation:with:]): _web_firstResponderIsSelfOrDescendantView name change.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@7170 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 a9d3914d2366f39f3945ea021d7042a7900d5358..ab8bb6d8477907b39b9076af62754893b871be56 100644 (file)
@@ -1,3 +1,29 @@
+2004-08-02  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by John
+
+        Update name of firstResponderIsSelfOrDescendantView, adding _web_ prefix to this SPI call.
+        
+        Do some work to make caret blinking in newly-created editable WebView's that are 
+        similar in structure to Blot more "automatic".
+
+        * Misc.subproj/WebNSViewExtras.h: Change name of firstResponderIsSelfOrDescendantView. Add _web_ prefix.
+        * Misc.subproj/WebNSViewExtras.m:
+        (-[NSView _web_firstResponderIsSelfOrDescendantView]): Name change.
+        (-[NSView _web_firstResponderCausesFocusDisplay]): Adds an additional check for whether the view's
+        is first responder. This helps to make the focus setting in viewDidMoveToWindow work right.
+        * WebView.subproj/WebHTMLView.m:
+        (-[WebHTMLView updateFocusDisplay]): Use _web_firstResponderCausesFocusDisplay now instead of 
+        firstResponderIsSelfOrDescendantView.
+        (-[WebHTMLView viewDidMoveToWindow]): Schedule call to updateFocusDisplay for the next crank of the
+        run loop. The reason is that placing the caret in the just-installed view requires the HTML/XML 
+        document to be available on the WebCore side, but it is not at the time this code is running. 
+        However, it will be there on the next crank of the run loop. Doing this helps to make a 
+        blinking caret appear in a new, empty window "automatic".
+        (-[WebHTMLView performKeyEquivalent:]):  _web_firstResponderIsSelfOrDescendantView name change.
+        * WebView.subproj/WebView.m:
+        (-[WebView _performResponderOperation:with:]): _web_firstResponderIsSelfOrDescendantView name change.
+
 2004-07-29  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by John.
index e3853103e66ab4100579218ea0c4b03017164588..5aa9f6878d2c36b6b517effafb01eea1562c7b01 100644 (file)
@@ -48,6 +48,7 @@
                 source:(id)source
                 offset:(NSPoint *)dragImageOffset;
 
-- (BOOL)firstResponderIsSelfOrDescendantView;
+- (BOOL)_web_firstResponderIsSelfOrDescendantView;
+- (BOOL)_web_firstResponderCausesFocusDisplay;
 
 @end
index c40ced6cc93571504ee9e46b1df0aa9331c96982..6c64008f8e1f20b08a91f25706545322699a3d0d 100644 (file)
     [self dragImage:dragImage at:origin offset:NSZeroSize event:event pasteboard:pasteboard source:source slideBack:YES];
 }
 
-- (BOOL)firstResponderIsSelfOrDescendantView
+- (BOOL)_web_firstResponderIsSelfOrDescendantView
 {
     NSResponder *responder = [[self window] firstResponder];
     return (responder && 
            ([responder isKindOfClass:[NSView class]] && [(NSView *)responder isDescendantOf:self])));
 }
 
+- (BOOL)_web_firstResponderCausesFocusDisplay
+{
+    return [self _web_firstResponderIsSelfOrDescendantView] || [[self window] firstResponder] == [self _web_parentWebFrameView];
+}
+
 @end
index e62dca9c8e162d809e15750f57ea733ca985c516..243b126d12826fd4d766bb4afa54cdcc4ff9f6f2 100644 (file)
@@ -1317,7 +1317,7 @@ static WebHTMLView *lastHitView = nil;
     // 2. Caret blinking (blinks | does not blink)
     // 3. The drawing of a focus ring around links in web pages.
 
-    BOOL flag = !_private->resigningFirstResponder && [[self window] isKeyWindow] && [self firstResponderIsSelfOrDescendantView];
+    BOOL flag = !_private->resigningFirstResponder && [[self window] isKeyWindow] && [self _web_firstResponderCausesFocusDisplay];
     [[self _bridge] setDisplaysWithFocusAttributes:flag];
 }
 
@@ -1422,7 +1422,13 @@ static WebHTMLView *lastHitView = nil;
             [self addWindowObservers];
             [self addSuperviewObservers];
             [self addMouseMovedObserver];
-            [self updateFocusDisplay];
+            // Schedule this update, rather than making the call right now.
+            // The reason is that placing the caret in the just-installed view requires
+            // the HTML/XML document to be available on the WebCore side, but it is not
+            // at the time this code is running. However, it will be there on the next
+            // crank of the run loop. Doing this helps to make a blinking caret appear 
+            // in a new, empty window "automatic".
+            [self performSelector:@selector(updateFocusDisplay) withObject:nil afterDelay:0];
     
             [[self _pluginController] startAllPlugins];
     
@@ -2286,7 +2292,7 @@ static WebHTMLView *lastHitView = nil;
 {
     // Pass command-key combos through WebCore if there is a key binding available for
     // this event. This lets web pages have a crack at intercepting command-modified keypresses.
-    if ([self firstResponderIsSelfOrDescendantView] && [[self _bridge] interceptKeyEvent:event toView:self]) {
+    if ([self _web_firstResponderIsSelfOrDescendantView] && [[self _bridge] interceptKeyEvent:event toView:self]) {
         return YES;
     }
     return [super performKeyEquivalent:event];
index 9eeff1a29516cdc1beb6f4d3656bc308ba52fd77..b413c9db4aed9eca6738611459833c1fbaee2de6 100644 (file)
@@ -2598,7 +2598,7 @@ static WebFrame *incrementFrame(WebFrame *curr, BOOL forward, BOOL wrapFlag)
 
     // Pass this selector down to the first responder.
     NSResponder *responder = [[self window] firstResponder];
-    if (![self firstResponderIsSelfOrDescendantView]) {
+    if (![self _web_firstResponderIsSelfOrDescendantView]) {
         responder = [[[self mainFrame] frameView] documentView];
         if (!responder) {
             responder = [[self mainFrame] frameView];