Changeset 244691 in webkit


Ignore:
Timestamp:
Apr 26, 2019 9:36:29 AM (5 years ago)
Author:
Chris Fleizach
Message:

AX: Provide iOS method for setting focus
https://bugs.webkit.org/show_bug.cgi?id=197200
<rdar://problem/50131679>

Reviewed by Alex Christensen.

Put the focus setting code in a place that iOS and macOS can access.
Override a platform level method for setting focus on iOS.

  • accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:

(-[WebAccessibilityObjectWrapper _accessibilitySetFocus:]):

  • accessibility/mac/WebAccessibilityObjectWrapperBase.h:
  • accessibility/mac/WebAccessibilityObjectWrapperBase.mm:

(-[WebAccessibilityObjectWrapperBase baseAccessibilitySetFocus:]):

  • accessibility/mac/WebAccessibilityObjectWrapperMac.mm:

(-[WebAccessibilityObjectWrapper _accessibilitySetValue:forAttribute:]):

Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r244690 r244691  
     12019-04-26  Chris Fleizach  <cfleizach@apple.com>
     2
     3        AX: Provide iOS method for setting focus
     4        https://bugs.webkit.org/show_bug.cgi?id=197200
     5        <rdar://problem/50131679>
     6
     7        Reviewed by Alex Christensen.
     8
     9        Put the focus setting code in a place that iOS and macOS can access.
     10        Override a platform level method for setting focus on iOS.
     11
     12        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
     13        (-[WebAccessibilityObjectWrapper _accessibilitySetFocus:]):
     14        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
     15        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
     16        (-[WebAccessibilityObjectWrapperBase baseAccessibilitySetFocus:]):
     17        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
     18        (-[WebAccessibilityObjectWrapper _accessibilitySetValue:forAttribute:]):
     19
    1202019-04-26  Said Abou-Hallawa  <sabouhallawa@apple.com>
    221
  • trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm

    r244582 r244691  
    20082008}
    20092009
     2010- (void)_accessibilitySetFocus:(BOOL)focus
     2011{
     2012    [self baseAccessibilitySetFocus:focus];
     2013}
     2014
    20102015- (void)accessibilityDecreaseSelection:(TextGranularity)granularity
    20112016{
  • trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.h

    r241321 r244691  
    8282- (NSArray<NSString *> *)baseAccessibilitySpeechHint;
    8383
     84- (void)baseAccessibilitySetFocus:(BOOL)focus;
    8485- (NSString *)ariaLandmarkRoleDescription;
    8586
  • trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm

    r242528 r244691  
    572572}
    573573
     574- (void)baseAccessibilitySetFocus:(BOOL)focus
     575{
     576    // If focus is just set without making the view the first responder, then keyboard focus won't move to the right place.
     577    if (focus && !m_object->document()->frame()->selection().isFocusedAndActive()) {
     578        FrameView* frameView = m_object->documentFrameView();
     579        Page* page = m_object->page();
     580        if (page && frameView) {
     581            ChromeClient& chromeClient = page->chrome().client();
     582            chromeClient.focus();
     583
     584            // Legacy WebKit1 case.
     585            if (frameView->platformWidget())
     586                chromeClient.makeFirstResponder(frameView->platformWidget());
     587            else
     588                chromeClient.assistiveTechnologyMakeFirstResponder();
     589        }
     590    }
     591
     592    m_object->setFocused(focus);
     593}
     594
    574595- (NSString *)accessibilityPlatformMathSubscriptKey
    575596{
  • trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm

    r244582 r244691  
    38723872        m_object->setSelectedVisiblePositionRange([self visiblePositionRangeForTextMarkerRange:textMarkerRange]);
    38733873    } else if ([attributeName isEqualToString: NSAccessibilityFocusedAttribute]) {
    3874         ASSERT(number);
    3875        
    3876         bool focus = [number boolValue];
    3877        
    3878         // If focus is just set without making the view the first responder, then keyboard focus won't move to the right place.
    3879         if (focus && !m_object->document()->frame()->selection().isFocusedAndActive()) {
    3880             FrameView* frameView = m_object->documentFrameView();
    3881             Page* page = m_object->page();
    3882             if (page && frameView) {
    3883                 ChromeClient& chromeClient = page->chrome().client();
    3884                 chromeClient.focus();
    3885                
    3886                 // Legacy WebKit1 case.
    3887                 if (frameView->platformWidget())
    3888                     chromeClient.makeFirstResponder(frameView->platformWidget());
    3889                 else
    3890                     chromeClient.assistiveTechnologyMakeFirstResponder();
    3891             }
    3892         }
    3893        
    3894         m_object->setFocused(focus);
     3874        [self baseAccessibilitySetFocus:[number boolValue]];
    38953875    } else if ([attributeName isEqualToString: NSAccessibilityValueAttribute]) {
    38963876        if (number && m_object->canSetNumericValue())
Note: See TracChangeset for help on using the changeset viewer.