|
15 | 15 | #include <Utils/KeyboardUtils.h> |
16 | 16 | #include <Utils/ValueUtils.h> |
17 | 17 | #include <Views/FrameworkElementTransferProperties.h> |
| 18 | +#include <atlcomcli.h> |
18 | 19 | #include <winrt/Microsoft.ReactNative.Composition.Experimental.h> |
19 | 20 | #include <winrt/Microsoft.UI.Input.h> |
20 | 21 | #include <winrt/Windows.UI.Composition.h> |
@@ -350,9 +351,9 @@ void ComponentView::onLostFocus( |
350 | 351 |
|
351 | 352 | m_componentHostingFocusVisual->hostFocusVisual(false, get_strong()); |
352 | 353 | } |
353 | | - if (m_uiaProvider) { |
| 354 | + if (UiaClientsAreListening()) { |
354 | 355 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
355 | | - m_uiaProvider, UIA_HasKeyboardFocusPropertyId, true, false); |
| 356 | + EnsureUiaProvider(), UIA_HasKeyboardFocusPropertyId, true, false); |
356 | 357 | } |
357 | 358 | } |
358 | 359 | base_type::onLostFocus(args); |
@@ -400,8 +401,8 @@ void ComponentView::onGotFocus( |
400 | 401 | focusRect.size.height += (FOCUS_VISUAL_WIDTH * 2); |
401 | 402 | focusVisualRoot(focusRect)->hostFocusVisual(true, get_strong()); |
402 | 403 | } |
403 | | - if (m_uiaProvider) { |
404 | | - auto spProviderSimple = m_uiaProvider.try_as<IRawElementProviderSimple>(); |
| 404 | + if (UiaClientsAreListening()) { |
| 405 | + auto spProviderSimple = EnsureUiaProvider().try_as<IRawElementProviderSimple>(); |
405 | 406 | if (spProviderSimple != nullptr) { |
406 | 407 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
407 | 408 | m_uiaProvider, UIA_HasKeyboardFocusPropertyId, false, true); |
@@ -705,67 +706,71 @@ void ComponentView::updateTransformProps( |
705 | 706 | void ComponentView::updateAccessibilityProps( |
706 | 707 | const facebook::react::ViewProps &oldViewProps, |
707 | 708 | const facebook::react::ViewProps &newViewProps) noexcept { |
708 | | - if (!m_uiaProvider) |
| 709 | + if (!UiaClientsAreListening()) |
709 | 710 | return; |
710 | 711 |
|
711 | 712 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
712 | | - m_uiaProvider, UIA_IsKeyboardFocusablePropertyId, oldViewProps.focusable, newViewProps.focusable); |
| 713 | + EnsureUiaProvider(), UIA_IsKeyboardFocusablePropertyId, oldViewProps.focusable, newViewProps.focusable); |
713 | 714 |
|
714 | 715 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
715 | | - m_uiaProvider, |
| 716 | + EnsureUiaProvider(), |
716 | 717 | UIA_NamePropertyId, |
717 | 718 | oldViewProps.accessibilityLabel, |
718 | 719 | newViewProps.accessibilityLabel.empty() ? DefaultAccessibleName() : newViewProps.accessibilityLabel); |
719 | 720 |
|
720 | 721 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
721 | | - m_uiaProvider, |
| 722 | + EnsureUiaProvider(), |
722 | 723 | UIA_IsContentElementPropertyId, |
723 | 724 | (oldViewProps.accessible && oldViewProps.accessibilityRole != "none"), |
724 | 725 | (newViewProps.accessible && newViewProps.accessibilityRole != "none")); |
725 | 726 |
|
726 | 727 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
727 | | - m_uiaProvider, |
| 728 | + EnsureUiaProvider(), |
728 | 729 | UIA_IsControlElementPropertyId, |
729 | 730 | (oldViewProps.accessible && oldViewProps.accessibilityRole != "none"), |
730 | 731 | (newViewProps.accessible && newViewProps.accessibilityRole != "none")); |
731 | 732 |
|
732 | 733 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
733 | | - m_uiaProvider, |
| 734 | + EnsureUiaProvider(), |
734 | 735 | UIA_IsEnabledPropertyId, |
735 | 736 | !(oldViewProps.accessibilityState && oldViewProps.accessibilityState->disabled), |
736 | 737 | !(newViewProps.accessibilityState && newViewProps.accessibilityState->disabled)); |
737 | 738 |
|
738 | 739 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
739 | | - m_uiaProvider, |
| 740 | + EnsureUiaProvider(), |
740 | 741 | UIA_IsEnabledPropertyId, |
741 | 742 | !(oldViewProps.accessibilityState && oldViewProps.accessibilityState->busy), |
742 | 743 | !(newViewProps.accessibilityState && newViewProps.accessibilityState->busy)); |
743 | 744 |
|
744 | 745 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
745 | | - m_uiaProvider, UIA_ControlTypePropertyId, oldViewProps.accessibilityRole, newViewProps.accessibilityRole); |
| 746 | + EnsureUiaProvider(), UIA_ControlTypePropertyId, oldViewProps.accessibilityRole, newViewProps.accessibilityRole); |
746 | 747 |
|
747 | 748 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
748 | | - m_uiaProvider, UIA_HelpTextPropertyId, oldViewProps.accessibilityHint, newViewProps.accessibilityHint); |
| 749 | + EnsureUiaProvider(), UIA_HelpTextPropertyId, oldViewProps.accessibilityHint, newViewProps.accessibilityHint); |
749 | 750 |
|
750 | 751 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
751 | | - m_uiaProvider, |
| 752 | + EnsureUiaProvider(), |
752 | 753 | UIA_PositionInSetPropertyId, |
753 | 754 | oldViewProps.accessibilityPosInSet, |
754 | 755 | newViewProps.accessibilityPosInSet); |
755 | 756 |
|
756 | 757 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
757 | | - m_uiaProvider, UIA_SizeOfSetPropertyId, oldViewProps.accessibilitySetSize, newViewProps.accessibilitySetSize); |
| 758 | + EnsureUiaProvider(), |
| 759 | + UIA_SizeOfSetPropertyId, |
| 760 | + oldViewProps.accessibilitySetSize, |
| 761 | + newViewProps.accessibilitySetSize); |
758 | 762 |
|
759 | 763 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
760 | | - m_uiaProvider, |
| 764 | + EnsureUiaProvider(), |
761 | 765 | UIA_LiveSettingPropertyId, |
762 | 766 | oldViewProps.accessibilityLiveRegion, |
763 | 767 | newViewProps.accessibilityLiveRegion); |
764 | 768 |
|
765 | 769 | if ((oldViewProps.accessibilityState.has_value() && oldViewProps.accessibilityState->selected.has_value()) != |
766 | 770 | ((newViewProps.accessibilityState.has_value() && newViewProps.accessibilityState->selected.has_value()))) { |
767 | 771 | auto compProvider = |
768 | | - m_uiaProvider.try_as<winrt::Microsoft::ReactNative::implementation::CompositionDynamicAutomationProvider>(); |
| 772 | + EnsureUiaProvider() |
| 773 | + .try_as<winrt::Microsoft::ReactNative::implementation::CompositionDynamicAutomationProvider>(); |
769 | 774 | if (compProvider) { |
770 | 775 | if ((newViewProps.accessibilityState.has_value() && newViewProps.accessibilityState->selected.has_value())) { |
771 | 776 | winrt::Microsoft::ReactNative::implementation::AddSelectionItemsToContainer(compProvider.get()); |
|
0 commit comments