|
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