WebCore:
authortimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 18 Jan 2008 19:49:37 +0000 (19:49 +0000)
committertimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 18 Jan 2008 19:49:37 +0000 (19:49 +0000)
        Reviewed by Adam Roben.

        <rdar://problem/5693558> REGRESSION (r29581): no form field focus
        rings and inactive text selection after loading a page
        Bug 16910: [GTK] REGRESSION: keyboard cursor doesn't blink
        Bug 16917: REGRESSION (r29581/2): Google Maps search box loses focused appearance

        * page/FocusController.cpp:
        (WebCore::FocusController::setActive): Use focusedOrMainFrame() instead of focusedFrame()
        to call selectionController()->pageActivationChanged() for cases when the focusedFrame()
        has not been set yet.

WebKit/mac:

        Reviewed by Adam Roben.

        <rdar://problem/5693558> REGRESSION (r29581): no form field focus rings
        and inactive text selection after loading a page
        Bug 16917: REGRESSION (r29581/2): Google Maps search box loses focused appearance

        The problem was other frames were changing the FocusController's active
        status to false after the first responder frame set it to true. The last
        frame to call _updateActiveState would win.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateActiveState]): Only call page->focusController()->setActive()
        if the first responder is the current WebHTMLView or the WebFrameView.
        (-[WebHTMLView _web_firstResponderCausesFocusDisplay]): Removed, inlined code in _updateActiveState.

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

WebCore/ChangeLog
WebCore/page/FocusController.cpp
WebKit/mac/ChangeLog
WebKit/mac/WebView/WebHTMLView.mm

index 201957a..619a9a9 100644 (file)
@@ -1,3 +1,17 @@
+2008-01-18  Timothy Hatcher  <timothy@apple.com>
+
+        Reviewed by Adam Roben.
+
+        <rdar://problem/5693558> REGRESSION (r29581): no form field focus
+        rings and inactive text selection after loading a page
+        Bug 16910: [GTK] REGRESSION: keyboard cursor doesn't blink
+        Bug 16917: REGRESSION (r29581/2): Google Maps search box loses focused appearance
+
+        * page/FocusController.cpp:
+        (WebCore::FocusController::setActive): Use focusedOrMainFrame() instead of focusedFrame()
+        to call selectionController()->pageActivationChanged() for cases when the focusedFrame()
+        has not been set yet. 
+
 2008-01-18  Alexey Proskuryakov  <ap@webkit.org>
 
         Reviewed by Brady.
index cdc08b3..a3542aa 100644 (file)
@@ -304,8 +304,7 @@ void FocusController::setActive(bool active)
         view->updateControlTints();
 #endif
 
-    if (Frame* frame = focusedFrame())
-        frame->selectionController()->pageActivationChanged();
+    focusedOrMainFrame()->selectionController()->pageActivationChanged();
 }
 
 } // namespace WebCore
index 69e23b4..37ec0e6 100644 (file)
@@ -1,3 +1,20 @@
+2008-01-17  Timothy Hatcher  <timothy@apple.com>
+
+        Reviewed by Adam Roben.
+
+        <rdar://problem/5693558> REGRESSION (r29581): no form field focus rings
+        and inactive text selection after loading a page
+        Bug 16917: REGRESSION (r29581/2): Google Maps search box loses focused appearance
+
+        The problem was other frames were changing the FocusController's active
+        status to false after the first responder frame set it to true. The last
+        frame to call _updateActiveState would win.
+
+        * WebView/WebHTMLView.mm:
+        (-[WebHTMLView _updateActiveState]): Only call page->focusController()->setActive()
+        if the first responder is the current WebHTMLView or the WebFrameView.
+        (-[WebHTMLView _web_firstResponderCausesFocusDisplay]): Removed, inlined code in _updateActiveState.
+
 2008-01-18  Adam Roben  <aroben@apple.com>
 
         Rename _updateActiveState to _updateFocusedAndActiveState
index e6f0d15..e596b55 100644 (file)
@@ -1692,11 +1692,6 @@ static void _updateMouseoverTimerCallback(CFRunLoopTimerRef timer, void *info)
     [_private->highlighters removeObjectForKey:type];
 }
 
-- (BOOL)_web_firstResponderCausesFocusDisplay
-{
-    return [[self window] firstResponder] == self || [[self window] firstResponder] == [self _frameView];
-}
-
 - (void)_updateFocusedAndActiveState
 {
     [self _cancelUpdateFocusedAndActiveStateTimer];
@@ -1726,8 +1721,10 @@ static void _updateMouseoverTimerCallback(CFRunLoopTimerRef timer, void *info)
     BOOL windowIsKey = [window isKeyWindow];
     BOOL windowOrSheetIsKey = windowIsKey || [[window attachedSheet] isKeyWindow];
 
-    BOOL isActive = !_private->resigningFirstResponder && windowIsKey && [self _web_firstResponderCausesFocusDisplay];
-    page->focusController()->setActive(isActive);
+    // FIXME: this can move to WebView since active state is Page level, not Frame level.
+    NSResponder *firstResponder = [window firstResponder];
+    if (firstResponder == self || firstResponder == [self _frameView])
+        page->focusController()->setActive(!_private->resigningFirstResponder && windowIsKey);
 
     Frame* focusedFrame = page->focusController()->focusedOrMainFrame();
     frame->selectionController()->setFocused(frame == focusedFrame && windowOrSheetIsKey);