Regression: VO cursor doesn't follow KB focus back into HTML view
authorcfleizach@apple.com <cfleizach@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 31 Mar 2011 00:44:39 +0000 (00:44 +0000)
committercfleizach@apple.com <cfleizach@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 31 Mar 2011 00:44:39 +0000 (00:44 +0000)
https://bugs.webkit.org/show_bug.cgi?id=57509

Reviewed by Darin Adler.

In WK2, because the web area never believes focus leave the area, sending the initial
focus change when moving back into the web area, does not trigger a notification.

That behavior needs to be overridden by explicitly posting a focused UI element change
at the appropriate time. This is only used in WK2, hence the absence of a layout test for now.

* page/FocusController.cpp:
(WebCore::FocusController::setInitialFocus):

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

Source/WebCore/ChangeLog
Source/WebCore/page/FocusController.cpp

index 30de088..b03326e 100644 (file)
@@ -1,3 +1,19 @@
+2011-03-30  Chris Fleizach  <cfleizach@apple.com>
+
+        Reviewed by Darin Adler.
+
+        Regression: VO cursor doesn't follow KB focus back into HTML view
+        https://bugs.webkit.org/show_bug.cgi?id=57509
+
+        In WK2, because the web area never believes focus leave the area, sending the initial
+        focus change when moving back into the web area, does not trigger a notification.
+
+        That behavior needs to be overridden by explicitly posting a focused UI element change
+        at the appropriate time. This is only used in WK2, hence the absence of a layout test for now.
+
+        * page/FocusController.cpp:
+        (WebCore::FocusController::setInitialFocus):
+
 2011-03-30  MORITA Hajime  <morrita@google.com>
 
         Reviewed by Simon Fraser.
index 41cfee4..48acff1 100644 (file)
@@ -170,7 +170,15 @@ static Node* deepFocusableNode(FocusDirection direction, Node* node, KeyboardEve
 
 bool FocusController::setInitialFocus(FocusDirection direction, KeyboardEvent* event)
 {
-    return advanceFocus(direction, event, true);
+    bool didAdvanceFocus = advanceFocus(direction, event, true);
+    
+    // If focus is being set initially, accessibility needs to be informed that system focus has moved 
+    // into the web area again, even if focus did not change within WebCore. PostNotification is called instead
+    // of handleFocusedUIElementChanged, because this will send the notification even if the element is the same.
+    if (AXObjectCache::accessibilityEnabled())
+        focusedOrMainFrame()->document()->axObjectCache()->postNotification(focusedOrMainFrame()->document()->renderer(), AXObjectCache::AXFocusedUIElementChanged, true);
+
+    return didAdvanceFocus;
 }
 
 bool FocusController::advanceFocus(FocusDirection direction, KeyboardEvent* event, bool initialFocus)