Skip to content

Commit 4037a50

Browse files
[UWP Renderer] Allow nested fallbacks (#8234)
* Switch to gotFocus (#8148) (#8150) * Update custom.props * [UWP] Update custom.props for object model release (#8225) * Update custom.props for object model release * Updated Xcode version (#8222) * removed build step as they are redundant (#8201) * removed build step as they are redundant * added pod installation step Co-authored-by: Joseph Woo <[email protected]> * [UWP Renderer] Add a null check to inline action rendering (#8228) * Update custom.props for object model release * Updated Xcode version (#8222) * removed build step as they are redundant (#8201) * removed build step as they are redundant * added pod installation step * Add a null check for inline Actions Co-authored-by: Joseph Woo <[email protected]> * Update fallback behavior --------- Co-authored-by: Joseph Woo <[email protected]>
1 parent ae38b66 commit 4037a50

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

source/uwp/SharedRenderer/lib/XamlBuilder.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,18 @@ namespace AdaptiveCards::Rendering::Xaml_Rendering
302302
throw ex;
303303
}
304304

305-
std::tie(newControl, renderedElement) = XamlHelpers::RenderFallback(element, renderContext, renderArgs);
305+
try
306+
{
307+
std::tie(newControl, renderedElement) = XamlHelpers::RenderFallback(element, renderContext, renderArgs);
308+
}
309+
catch (winrt::hresult_error const& ex)
310+
{
311+
// if we get an E_PERFORM_FALLBACK error again, we should only throw it if `ancestorHasFallBack`
312+
if (ex.code() != E_PERFORM_FALLBACK || (ex.code() == E_PERFORM_FALLBACK && ancestorHasFallback))
313+
{
314+
throw ex;
315+
}
316+
}
306317
}
307318

308319
// If we got a control, add a separator if needed and the control to the parent panel

source/uwp/SharedRenderer/lib/XamlHelpers.cpp

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -333,15 +333,28 @@ namespace AdaptiveCards::Rendering::Xaml_Rendering::XamlHelpers
333333

334334
if (fallbackElementRenderer)
335335
{
336-
fallbackControl = fallbackElementRenderer.Render(fallbackElement, renderContext, renderArgs);
337-
338-
renderedElement = fallbackElement;
336+
try
337+
{
338+
fallbackControl = fallbackElementRenderer.Render(fallbackElement, renderContext, renderArgs);
339+
renderedElement = fallbackElement;
340+
}
341+
catch (winrt::hresult_error const& ex)
342+
{
343+
if (ex.code() == E_PERFORM_FALLBACK)
344+
{
345+
std::tie(fallbackControl, renderedElement) = RenderFallback(fallbackElement, renderContext, renderArgs);
346+
}
347+
else
348+
{
349+
throw(ex);
350+
}
351+
}
339352
}
340-
341-
if (!fallbackControl)
353+
else
342354
{
343355
std::tie(fallbackControl, renderedElement) = RenderFallback(fallbackElement, renderContext, renderArgs);
344356
}
357+
345358
fallbackHandled = true;
346359
break;
347360
}

0 commit comments

Comments
 (0)