From cc8971447bcd341888f0379ae0d2afd003bd64c0 Mon Sep 17 00:00:00 2001 From: Scott Jones Date: Tue, 7 Jun 2022 13:58:15 -0700 Subject: [PATCH 1/2] IComponentConnector2 doesn't exist in WinUI --- cppwinrt/code_writers.h | 4 +- strings/base_xaml_component_connector.h | 2 +- strings/base_xaml_component_connector_winui.h | 52 +++++++++++++++++++ 3 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 strings/base_xaml_component_connector_winui.h diff --git a/cppwinrt/code_writers.h b/cppwinrt/code_writers.h index e6122a514..1781ebe61 100644 --- a/cppwinrt/code_writers.h +++ b/cppwinrt/code_writers.h @@ -3272,11 +3272,11 @@ struct __declspec(empty_bases) produce_dispatch_to_overridable } else if (namespace_name == "Windows.UI.Xaml.Markup") { - w.write(strings::base_xaml_component_connector, "Windows"); + w.write(strings::base_xaml_component_connector); } else if (namespace_name == "Microsoft.UI.Xaml.Markup") { - w.write(strings::base_xaml_component_connector, "Microsoft"); + w.write(strings::base_xaml_component_connector_winui); } } diff --git a/strings/base_xaml_component_connector.h b/strings/base_xaml_component_connector.h index ac2edf807..16478f7a2 100644 --- a/strings/base_xaml_component_connector.h +++ b/strings/base_xaml_component_connector.h @@ -1,5 +1,5 @@ -WINRT_EXPORT namespace winrt::%::UI::Xaml::Markup +WINRT_EXPORT namespace winrt::Windows::UI::Xaml::Markup { template struct ComponentConnectorT : D diff --git a/strings/base_xaml_component_connector_winui.h b/strings/base_xaml_component_connector_winui.h new file mode 100644 index 000000000..9a84cc11d --- /dev/null +++ b/strings/base_xaml_component_connector_winui.h @@ -0,0 +1,52 @@ + +WINRT_EXPORT namespace winrt::Microsoft::UI::Xaml::Markup +{ + template + struct ComponentConnectorT : D + { + using composable_base = typename D::composable_base; + + void InitializeComponent() + { + if constexpr (m_has_connectable_base) + { + m_dispatch_base = true; + composable_base::InitializeComponent(); + m_dispatch_base = false; + } + D::InitializeComponent(); + } + + void Connect(int32_t connectionId, Windows::Foundation::IInspectable const& target) + { + if constexpr (m_has_connectable_base) + { + if (m_dispatch_base) + { + composable_base::Connect(connectionId, target); + return; + } + } + D::Connect(connectionId, target); + } + + auto GetBindingConnector(int32_t connectionId, Windows::Foundation::IInspectable const& target) + { + if constexpr (m_has_connectable_base) + { + if (m_dispatch_base) + { + return composable_base::GetBindingConnector(connectionId, target); + } + } + return D::GetBindingConnector(connectionId, target); + } + + private: + static constexpr bool m_has_connectable_base{ + impl::has_initializer::value && + impl::has_interface() }; + + bool m_dispatch_base{}; + }; +} From 972a656d209a0877bae0df1796e33dec2f603240 Mon Sep 17 00:00:00 2001 From: Scott Jones Date: Tue, 7 Jun 2022 14:13:02 -0700 Subject: [PATCH 2/2] added new header --- cppwinrt/cppwinrt.vcxproj | 1 + cppwinrt/cppwinrt.vcxproj.filters | 3 +++ 2 files changed, 4 insertions(+) diff --git a/cppwinrt/cppwinrt.vcxproj b/cppwinrt/cppwinrt.vcxproj index 391fda68f..946152619 100644 --- a/cppwinrt/cppwinrt.vcxproj +++ b/cppwinrt/cppwinrt.vcxproj @@ -89,6 +89,7 @@ + diff --git a/cppwinrt/cppwinrt.vcxproj.filters b/cppwinrt/cppwinrt.vcxproj.filters index 9033a34a8..3176b206f 100644 --- a/cppwinrt/cppwinrt.vcxproj.filters +++ b/cppwinrt/cppwinrt.vcxproj.filters @@ -178,6 +178,9 @@ strings + + strings +