Reviewed by Dave Hyatt.
authorsullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 14 Jul 2005 23:52:55 +0000 (23:52 +0000)
committersullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 14 Jul 2005 23:52:55 +0000 (23:52 +0000)
        - WebKit part of fix for:
        <rdar://problem/4181227> webpages incorrectly use standard instead of secondary highlighting in certain cases

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge formControlIsResigningFirstResponder:]):
        Implementation of new method defined in WebCore, passes call along to WebHTMLView

        * WebView.subproj/WebHTMLViewInternal.h:
        declare _formControlIsResigningFirstResponder: so bridge can call it

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView updateFocusState]):
        just moved in file so it could be called from a different category
        (-[WebHTMLView _formControlIsResigningFirstResponder:]):
        new method, updates focus state

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

WebKit/ChangeLog
WebKit/WebCoreSupport.subproj/WebBridge.m
WebKit/WebView.subproj/WebHTMLView.m
WebKit/WebView.subproj/WebHTMLViewInternal.h

index b14a86a..b9dda23 100644 (file)
@@ -1,5 +1,25 @@
 2005-07-14  John Sullivan  <sullivan@apple.com>
 
+        Reviewed by Dave Hyatt.
+
+        - WebKit part of fix for: 
+        <rdar://problem/4181227> webpages incorrectly use standard instead of secondary highlighting in certain cases
+
+        * WebCoreSupport.subproj/WebBridge.m:
+        (-[WebBridge formControlIsResigningFirstResponder:]):
+        Implementation of new method defined in WebCore, passes call along to WebHTMLView
+        
+        * WebView.subproj/WebHTMLViewInternal.h:
+        declare _formControlIsResigningFirstResponder: so bridge can call it
+
+        * WebView.subproj/WebHTMLView.m:
+        (-[WebHTMLView updateFocusState]):
+        just moved in file so it could be called from a different category
+        (-[WebHTMLView _formControlIsResigningFirstResponder:]):
+        new method, updates focus state
+
+2005-07-14  John Sullivan  <sullivan@apple.com>
+
        added missing #import to fix build
        * WebView.subproj/WebPDFView.m
 
index f84f067..9c6690d 100644 (file)
@@ -59,6 +59,7 @@
 #import <WebKit/WebNSObjectExtras.h>
 #import <WebKit/WebNSURLExtras.h>
 #import <WebKit/WebNSURLRequestExtras.h>
+#import <WebKit/WebNSViewExtras.h>
 #import <WebKit/WebNullPluginView.h>
 #import <WebKit/WebPlugin.h>
 #import <WebKit/WebPluginController.h>
@@ -614,6 +615,13 @@ NSString *WebPluginContainerKey =   @"WebPluginContainer";
     }
 }
 
+- (void)formControlIsResigningFirstResponder:(NSView *)formControl
+{
+    // When a form element resigns first responder, its enclosing WebHTMLView might need to
+    // change its focus-displaying state, but isn't otherwise notified.
+    [(WebHTMLView *)[formControl _web_superviewOfClass:[WebHTMLView class]] _formControlIsResigningFirstResponder:formControl];
+}
+
 - (void)setIconURL:(NSURL *)URL
 {
     [[self dataSource] _setIconURL:URL];
index faecc31..faff4f2 100644 (file)
@@ -189,6 +189,7 @@ void *_NSSoftLinkingGetFrameworkFuncPtr(NSString *inUmbrellaFrameworkName,
 - (void)_deleteSelection;
 - (BOOL)_canSmartReplaceWithPasteboard:(NSPasteboard *)pasteboard;
 - (NSView *)_hitViewForEvent:(NSEvent *)event;
+- (void)updateFocusState;
 - (void)_writeSelectionWithPasteboardTypes:(NSArray *)types toPasteboard:(NSPasteboard *)pasteboard cachedAttributedString:(NSAttributedString *)attributedString;
 @end
 
@@ -646,6 +647,30 @@ void *_NSSoftLinkingGetFrameworkFuncPtr(NSString *inUmbrellaFrameworkName,
     }
 }
 
+- (void)updateFocusState
+{
+    // This method does the job of updating the view based on the view's firstResponder-ness and
+    // the window key-ness of the window containing this view. This involves three kinds of 
+    // drawing updates right now, all handled in WebCore in response to the call over the bridge. 
+    // 
+    // The three display attributes are as follows:
+    // 
+    // 1. The background color used to draw behind selected content (active | inactive color)
+    // 2. Caret blinking (blinks | does not blink)
+    // 3. The drawing of a focus ring around links in web pages.
+    //
+    // Also, this is responsible for letting the bridge know if the window has gained or lost focus
+    // so we can send focus and blur events.
+    
+    WebBridge *bridge = [self _bridge];
+    BOOL windowIsKey = [[self window] isKeyWindow];
+    
+    BOOL flag = !_private->resigningFirstResponder && windowIsKey && [self _web_firstResponderCausesFocusDisplay];
+    [bridge setDisplaysWithFocusAttributes:flag];
+    
+    [bridge setWindowHasFocus:windowIsKey];
+}
+
 @end
 
 @implementation WebHTMLView (WebPrivate)
@@ -2078,30 +2103,6 @@ static WebHTMLView *lastHitView = nil;
         name:WKMouseMovedNotification() object:nil];
 }
 
-- (void)updateFocusState
-{
-    // This method does the job of updating the view based on the view's firstResponder-ness and
-    // the window key-ness of the window containing this view. This involves three kinds of 
-    // drawing updates right now, all handled in WebCore in response to the call over the bridge. 
-    // 
-    // The three display attributes are as follows:
-    // 
-    // 1. The background color used to draw behind selected content (active | inactive color)
-    // 2. Caret blinking (blinks | does not blink)
-    // 3. The drawing of a focus ring around links in web pages.
-    //
-    // Also, this is responsible for letting the bridge know if the window has gained or lost focus
-    // so we can send focus and blur events.
-
-    WebBridge *bridge = [self _bridge];
-    BOOL windowIsKey = [[self window] isKeyWindow];
-
-    BOOL flag = !_private->resigningFirstResponder && windowIsKey && [self _web_firstResponderCausesFocusDisplay];
-    [bridge setDisplaysWithFocusAttributes:flag];
-
-    [bridge setWindowHasFocus:windowIsKey];
-}
-
 - (void)addSuperviewObservers
 {
     // We watch the bounds of our superview, so that we can do a layout when the size
@@ -4841,6 +4842,17 @@ static DOMRange *unionDOMRanges(DOMRange *a, DOMRange *b)
     _private->startNewKillRingSequence = YES;
 }
 
+- (void)_formControlIsResigningFirstResponder:(NSView *)formControl
+{
+    // set resigningFirstResponder so updateFocusState behaves the same way it does when
+    // the WebHTMLView itself is resigningFirstResponder; don't use the primary selection feedback.
+    // If the first responder is in the process of being set on the WebHTMLView itself, it will
+    // get another chance at updateFocusState in its own becomeFirstResponder method.
+    _private->resigningFirstResponder = YES;
+    [self updateFocusState];
+    _private->resigningFirstResponder = NO;
+}
+
 - (void)_updateFontPanel
 {
     // FIXME: NSTextView bails out if becoming or resigning first responder, for which it has ivar flags. Not
index 75655c3..cd08bf9 100644 (file)
@@ -90,6 +90,7 @@
 
 @interface WebHTMLView (WebInternal)
 - (void)_selectionChanged;
+- (void)_formControlIsResigningFirstResponder:(NSView *)formControl;
 - (void)_updateFontPanel;
 - (unsigned int)_delegateDragSourceActionMask;
 - (BOOL)_canSmartCopyOrDelete;