|
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> |
@@ -331,9 +332,9 @@ void ComponentView::onLostFocus( |
331 | 332 |
|
332 | 333 | m_componentHostingFocusVisual->hostFocusVisual(false, get_strong()); |
333 | 334 | } |
334 | | - if (m_uiaProvider) { |
| 335 | + if (UiaClientsAreListening()) { |
335 | 336 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
336 | | - m_uiaProvider, UIA_HasKeyboardFocusPropertyId, true, false); |
| 337 | + EnsureUiaProvider(), UIA_HasKeyboardFocusPropertyId, true, false); |
337 | 338 | } |
338 | 339 | } |
339 | 340 | base_type::onLostFocus(args); |
@@ -381,8 +382,8 @@ void ComponentView::onGotFocus( |
381 | 382 | focusRect.size.height += (FOCUS_VISUAL_WIDTH * 2); |
382 | 383 | focusVisualRoot(focusRect)->hostFocusVisual(true, get_strong()); |
383 | 384 | } |
384 | | - if (m_uiaProvider) { |
385 | | - auto spProviderSimple = m_uiaProvider.try_as<IRawElementProviderSimple>(); |
| 385 | + if (UiaClientsAreListening()) { |
| 386 | + auto spProviderSimple = EnsureUiaProvider().try_as<IRawElementProviderSimple>(); |
386 | 387 | if (spProviderSimple != nullptr) { |
387 | 388 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
388 | 389 | m_uiaProvider, UIA_HasKeyboardFocusPropertyId, false, true); |
@@ -743,67 +744,71 @@ void ComponentView::updateTransformProps( |
743 | 744 | void ComponentView::updateAccessibilityProps( |
744 | 745 | const facebook::react::ViewProps &oldViewProps, |
745 | 746 | const facebook::react::ViewProps &newViewProps) noexcept { |
746 | | - if (!m_uiaProvider) |
| 747 | + if (!UiaClientsAreListening()) |
747 | 748 | return; |
748 | 749 |
|
749 | 750 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
750 | | - m_uiaProvider, UIA_IsKeyboardFocusablePropertyId, oldViewProps.focusable, newViewProps.focusable); |
| 751 | + EnsureUiaProvider(), UIA_IsKeyboardFocusablePropertyId, oldViewProps.focusable, newViewProps.focusable); |
751 | 752 |
|
752 | 753 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
753 | | - m_uiaProvider, |
| 754 | + EnsureUiaProvider(), |
754 | 755 | UIA_NamePropertyId, |
755 | 756 | oldViewProps.accessibilityLabel, |
756 | 757 | newViewProps.accessibilityLabel.empty() ? DefaultAccessibleName() : newViewProps.accessibilityLabel); |
757 | 758 |
|
758 | 759 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
759 | | - m_uiaProvider, |
| 760 | + EnsureUiaProvider(), |
760 | 761 | UIA_IsContentElementPropertyId, |
761 | 762 | (oldViewProps.accessible && oldViewProps.accessibilityRole != "none"), |
762 | 763 | (newViewProps.accessible && newViewProps.accessibilityRole != "none")); |
763 | 764 |
|
764 | 765 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
765 | | - m_uiaProvider, |
| 766 | + EnsureUiaProvider(), |
766 | 767 | UIA_IsControlElementPropertyId, |
767 | 768 | (oldViewProps.accessible && oldViewProps.accessibilityRole != "none"), |
768 | 769 | (newViewProps.accessible && newViewProps.accessibilityRole != "none")); |
769 | 770 |
|
770 | 771 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
771 | | - m_uiaProvider, |
| 772 | + EnsureUiaProvider(), |
772 | 773 | UIA_IsEnabledPropertyId, |
773 | 774 | !(oldViewProps.accessibilityState && oldViewProps.accessibilityState->disabled), |
774 | 775 | !(newViewProps.accessibilityState && newViewProps.accessibilityState->disabled)); |
775 | 776 |
|
776 | 777 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
777 | | - m_uiaProvider, |
| 778 | + EnsureUiaProvider(), |
778 | 779 | UIA_IsEnabledPropertyId, |
779 | 780 | !(oldViewProps.accessibilityState && oldViewProps.accessibilityState->busy), |
780 | 781 | !(newViewProps.accessibilityState && newViewProps.accessibilityState->busy)); |
781 | 782 |
|
782 | 783 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
783 | | - m_uiaProvider, UIA_ControlTypePropertyId, oldViewProps.accessibilityRole, newViewProps.accessibilityRole); |
| 784 | + EnsureUiaProvider(), UIA_ControlTypePropertyId, oldViewProps.accessibilityRole, newViewProps.accessibilityRole); |
784 | 785 |
|
785 | 786 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
786 | | - m_uiaProvider, UIA_HelpTextPropertyId, oldViewProps.accessibilityHint, newViewProps.accessibilityHint); |
| 787 | + EnsureUiaProvider(), UIA_HelpTextPropertyId, oldViewProps.accessibilityHint, newViewProps.accessibilityHint); |
787 | 788 |
|
788 | 789 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
789 | | - m_uiaProvider, |
| 790 | + EnsureUiaProvider(), |
790 | 791 | UIA_PositionInSetPropertyId, |
791 | 792 | oldViewProps.accessibilityPosInSet, |
792 | 793 | newViewProps.accessibilityPosInSet); |
793 | 794 |
|
794 | 795 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
795 | | - m_uiaProvider, UIA_SizeOfSetPropertyId, oldViewProps.accessibilitySetSize, newViewProps.accessibilitySetSize); |
| 796 | + EnsureUiaProvider(), |
| 797 | + UIA_SizeOfSetPropertyId, |
| 798 | + oldViewProps.accessibilitySetSize, |
| 799 | + newViewProps.accessibilitySetSize); |
796 | 800 |
|
797 | 801 | winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( |
798 | | - m_uiaProvider, |
| 802 | + EnsureUiaProvider(), |
799 | 803 | UIA_LiveSettingPropertyId, |
800 | 804 | oldViewProps.accessibilityLiveRegion, |
801 | 805 | newViewProps.accessibilityLiveRegion); |
802 | 806 |
|
803 | 807 | if ((oldViewProps.accessibilityState.has_value() && oldViewProps.accessibilityState->selected.has_value()) != |
804 | 808 | ((newViewProps.accessibilityState.has_value() && newViewProps.accessibilityState->selected.has_value()))) { |
805 | 809 | auto compProvider = |
806 | | - m_uiaProvider.try_as<winrt::Microsoft::ReactNative::implementation::CompositionDynamicAutomationProvider>(); |
| 810 | + EnsureUiaProvider() |
| 811 | + .try_as<winrt::Microsoft::ReactNative::implementation::CompositionDynamicAutomationProvider>(); |
807 | 812 | if (compProvider) { |
808 | 813 | if ((newViewProps.accessibilityState.has_value() && newViewProps.accessibilityState->selected.has_value())) { |
809 | 814 | winrt::Microsoft::ReactNative::implementation::AddSelectionItemsToContainer(compProvider.get()); |
|
0 commit comments