Skip to content

Commit d4c4e53

Browse files
author
reunion-maestro-bot
committed
Syncing content from committish release/1.4.5
1 parent 20dcc18 commit d4c4e53

File tree

6 files changed

+108
-21
lines changed

6 files changed

+108
-21
lines changed

controls/dev/Breadcrumb/BreadcrumbBarItem.cpp

Lines changed: 65 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,16 @@
99
#include "BreadcrumbBar.h"
1010
#include "BreadcrumbBarItemAutomationPeer.h"
1111

12+
#include "velocity.h"
13+
#include <FrameworkUdk/Containment.h>
14+
15+
// Bug 48360852: [1.4 servicing] BreadcrumbBar leaks in File Explorer
16+
#define WINAPPSDK_CHANGEID_48360852 48360852
17+
// Bug 48634621: [1.4 servicing] File explorer's popup window is hidden by body (z-order issue?)
18+
#define WINAPPSDK_CHANGEID_48634621 48634621
19+
// Bug 48634543: [1.4 servicing] [Watson Failure] caused by FAIL_FAST_FATAL_APP_EXIT_c0000409_Microsoft.UI.Xaml.Controls.dll!BreadcrumbBarItem::CloneEllipsisItemSource
20+
#define WINAPPSDK_CHANGEID_48634543 48634543
21+
1222
namespace winrt::Microsoft::UI::Xaml::Controls
1323
{
1424
CppWinRTActivatableClassWithBasicFactory(BreadcrumbBarItem)
@@ -92,6 +102,10 @@ void BreadcrumbBarItem::OnApplyTemplate()
92102
if (m_isEllipsisItem)
93103
{
94104
m_ellipsisFlyout.set(GetTemplateChildT<winrt::Flyout>(s_itemEllipsisFlyoutPartName, controlProtected));
105+
if (WinAppSdk::Containment::IsChangeEnabled<WINAPPSDK_CHANGEID_48634621>())
106+
{
107+
m_ellipsisFlyout.get().ShouldConstrainToRootBounds(false);
108+
}
95109
}
96110

97111
m_button.set(GetTemplateChildT<winrt::Button>(s_itemButtonPartName, controlProtected));
@@ -149,7 +163,14 @@ void BreadcrumbBarItem::SetParentBreadcrumb(const winrt::BreadcrumbBar& parent)
149163
{
150164
MUX_ASSERT(!m_isEllipsisDropDownItem);
151165

152-
m_parentBreadcrumb.set(parent);
166+
if (WinAppSdk::Containment::IsChangeEnabled<WINAPPSDK_CHANGEID_48360852>())
167+
{
168+
m_parentBreadcrumbWeakRef = winrt::make_weak(parent);
169+
}
170+
else
171+
{
172+
m_parentBreadcrumb.set(parent);
173+
}
153174
}
154175

155176
void BreadcrumbBarItem::SetEllipsisDropDownItemDataTemplate(const winrt::IInspectable& newDataTemplate)
@@ -180,7 +201,17 @@ void BreadcrumbBarItem::SetIsEllipsisDropDownItem(bool isEllipsisDropDownItem)
180201

181202
void BreadcrumbBarItem::RaiseItemClickedEvent(const winrt::IInspectable& content, const uint32_t index)
182203
{
183-
if (const auto& breadcrumb = m_parentBreadcrumb.get())
204+
winrt::BreadcrumbBar breadcrumb;
205+
if (WinAppSdk::Containment::IsChangeEnabled<WINAPPSDK_CHANGEID_48360852>())
206+
{
207+
breadcrumb = m_parentBreadcrumbWeakRef.get();
208+
}
209+
else
210+
{
211+
breadcrumb = m_parentBreadcrumb.get();
212+
}
213+
214+
if (breadcrumb)
184215
{
185216
auto breadcrumbImpl = winrt::get_self<BreadcrumbBar>(breadcrumb);
186217
breadcrumbImpl->RaiseItemClickedEvent(content, index);
@@ -287,13 +318,27 @@ winrt::IInspectable BreadcrumbBarItem::CloneEllipsisItemSource(const winrt::Coll
287318
// The new list contains all the elements in reverse order
288319
const int itemsSourceSize = ellipsisItemsSource.Size();
289320

290-
// The itemsSourceSize should always be at least 1 as it must always contain the ellipsis item
291-
assert(itemsSourceSize > 0);
292-
293-
for (int i = itemsSourceSize - 1; i >= 0; --i)
321+
if (WinAppSdk::Containment::IsChangeEnabled<WINAPPSDK_CHANGEID_48634543>())
294322
{
295-
const auto& item = ellipsisItemsSource.GetAt(i);
296-
newItemsSource.Append(item);
323+
if(itemsSourceSize > 0)
324+
{
325+
for (int i = itemsSourceSize - 1; i >= 0; --i)
326+
{
327+
const auto& item = ellipsisItemsSource.GetAt(i);
328+
newItemsSource.Append(item);
329+
}
330+
}
331+
}
332+
else
333+
{
334+
// The itemsSourceSize should always be at least 1 as it must always contain the ellipsis item
335+
assert(itemsSourceSize > 0);
336+
337+
for (int i = itemsSourceSize - 1; i >= 0; --i)
338+
{
339+
const auto& item = ellipsisItemsSource.GetAt(i);
340+
newItemsSource.Append(item);
341+
}
297342
}
298343

299344
return newItemsSource;
@@ -431,7 +476,17 @@ void BreadcrumbBarItem::OnEllipsisItemClick(const winrt::IInspectable&, const wi
431476
{
432477
MUX_ASSERT(!m_isEllipsisDropDownItem);
433478

434-
if (const auto& breadcrumb = m_parentBreadcrumb.get())
479+
winrt::BreadcrumbBar breadcrumb;
480+
if (WinAppSdk::Containment::IsChangeEnabled<WINAPPSDK_CHANGEID_48360852>())
481+
{
482+
breadcrumb = m_parentBreadcrumbWeakRef.get();
483+
}
484+
else
485+
{
486+
breadcrumb = m_parentBreadcrumb.get();
487+
}
488+
489+
if (breadcrumb)
435490
{
436491
if (const auto& breadcrumbImpl = breadcrumb.try_as<BreadcrumbBar>())
437492
{
@@ -496,7 +551,7 @@ void BreadcrumbBarItem::InstantiateFlyout()
496551
{
497552
if (const auto& ellipsisFlyout = m_ellipsisFlyout.get())
498553
{
499-
// Create ItemsRepeater and set the DataTemplate
554+
// Create ItemsRepeater and set the DataTemplate
500555
const auto& ellipsisItemsRepeater = winrt::ItemsRepeater();
501556
ellipsisItemsRepeater.Name(s_ellipsisItemsRepeaterPartName);
502557
winrt::AutomationProperties::SetName(ellipsisItemsRepeater, s_ellipsisItemsRepeaterAutomationName);

controls/dev/Breadcrumb/BreadcrumbBarItem.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,12 @@ class BreadcrumbBarItem :
9595

9696
// BreadcrumbBarItem visual representation
9797
tracker_ref<winrt::Button> m_button{ this };
98+
9899
// Parent BreadcrumbBarItem to ask for hidden elements
100+
// Bug 48360852: [1.4 servicing] BreadcrumbBar leaks in File Explorer
101+
// A ref-counted pointer creates a reference cycle and a leak. Switch to the weak pointer when the fix is enabled under containment.
99102
tracker_ref<winrt::BreadcrumbBar> m_parentBreadcrumb{ this };
103+
winrt::weak_ref<winrt::BreadcrumbBar> m_parentBreadcrumbWeakRef{ nullptr };
100104

101105
// Flyout content for ellipsis item
102106
tracker_ref<winrt::Flyout> m_ellipsisFlyout{ this };

controls/dev/Breadcrumb/BreadcrumbLayout.cpp

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,26 @@
77
#include "BreadcrumbBar.h"
88
#include "BreadcrumbBarItem.h"
99

10+
#include "velocity.h"
11+
#include <FrameworkUdk/Containment.h>
12+
13+
// Bug 48360852: [1.4 servicing] BreadcrumbBar leaks in File Explorer
14+
#define WINAPPSDK_CHANGEID_48360852 48360852
15+
1016
BreadcrumbLayout::BreadcrumbLayout()
1117
{
1218
}
1319

1420
BreadcrumbLayout::BreadcrumbLayout(const winrt::BreadcrumbBar& breadcrumb)
1521
{
16-
m_breadcrumb = breadcrumb;
22+
if (WinAppSdk::Containment::IsChangeEnabled<WINAPPSDK_CHANGEID_48360852>())
23+
{
24+
m_breadcrumbWeakRef = winrt::make_weak(breadcrumb);
25+
}
26+
else
27+
{
28+
m_breadcrumb = breadcrumb;
29+
}
1730
}
1831

1932
BreadcrumbLayout::~BreadcrumbLayout()
@@ -61,7 +74,7 @@ winrt::Size BreadcrumbLayout::MeasureOverride(winrt::NonVirtualizingLayoutContex
6174

6275
if (accumulatedCrumbsSize.Width > availableSize.Width)
6376
{
64-
m_ellipsisIsRendered = true;
77+
m_ellipsisIsRendered = true;
6578
}
6679
else
6780
{
@@ -185,9 +198,20 @@ winrt::Size BreadcrumbLayout::ArrangeOverride(winrt::NonVirtualizingLayoutContex
185198
}
186199
}
187200

188-
if (const auto& breadcrumb = m_breadcrumb.try_as<BreadcrumbBar>())
201+
if (WinAppSdk::Containment::IsChangeEnabled<WINAPPSDK_CHANGEID_48360852>())
189202
{
190-
breadcrumb->ReIndexVisibleElementsForAccessibility();
203+
if (const auto& breadcrumb = m_breadcrumbWeakRef.get())
204+
{
205+
auto breadcrumbImpl = winrt::get_self<BreadcrumbBar>(breadcrumb);
206+
breadcrumbImpl->ReIndexVisibleElementsForAccessibility();
207+
}
208+
}
209+
else
210+
{
211+
if (const auto& breadcrumb = m_breadcrumb.try_as<BreadcrumbBar>())
212+
{
213+
breadcrumb->ReIndexVisibleElementsForAccessibility();
214+
}
191215
}
192216

193217
return finalSize;

controls/dev/Breadcrumb/BreadcrumbLayout.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@ class BreadcrumbLayout :
4141

4242
winrt::Size m_availableSize{};
4343
winrt::BreadcrumbBarItem m_ellipsisButton{nullptr};
44+
45+
// Bug 48360852: [1.4 servicing] BreadcrumbBar leaks in File Explorer
46+
// A ref-counted pointer creates a reference cycle and a leak. Switch to the weak pointer when the fix is enabled under containment.
4447
winrt::BreadcrumbBar m_breadcrumb{ nullptr };
48+
winrt::weak_ref<winrt::BreadcrumbBar> m_breadcrumbWeakRef{ nullptr }; // weak_ref because the BreadcrumbBar already points to us via m_itemsRepeaterLayout
4549

4650
bool m_ellipsisIsRendered{};
4751
uint32_t m_firstRenderedItemIndexAfterEllipsis{};

eng/Version.Details.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22
<!-- Copyright (c) Microsoft Corporation. Licensed under the MIT License. See LICENSE in the project root for license information. -->
33
<Dependencies>
44
<ProductDependencies>
5-
<Dependency Name="Microsoft.WindowsAppSDK.Foundation.TransportPackage" Version="1.4.0-20231216.0">
5+
<Dependency Name="Microsoft.WindowsAppSDK.Foundation.TransportPackage" Version="1.4.0-20240211.0">
66
<Uri>https://dev.azure.com/microsoft/ProjectReunion/_git/WindowsAppSDK</Uri>
7-
<Sha>e1e38e7e4df1f862ddaac4f4f9a4e77930c55fee</Sha>
7+
<Sha>7d84b710d4c08dc9b8c5506de07bda50c9439369</Sha>
88
</Dependency>
9-
<Dependency Name="Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage" Version="1.4.4-CI-22624.1058.231213-1411.1">
9+
<Dependency Name="Microsoft.ProjectReunion.InteractiveExperiences.TransportPackage" Version="1.4.4-CI-22624.1061.240209-1942.0">
1010
<Uri>https://dev.azure.com/microsoft/LiftedIXP/_git/DCPP</Uri>
11-
<Sha>3a7a80cf90baf200787d3ffee0443c6a58aacb1f</Sha>
11+
<Sha>2c479f6a2492832f2078a92c9d0489193ff9edba</Sha>
1212
</Dependency>
13-
<Dependency Name="Microsoft.Internal.InteractiveExperiences" Version="1.4.4-CI-22624.1058.231213-1411.1">
13+
<Dependency Name="Microsoft.Internal.InteractiveExperiences" Version="1.4.4-CI-22624.1061.240209-1942.0">
1414
<Uri>https://dev.azure.com/microsoft/LiftedIXP/_git/DCPP</Uri>
15-
<Sha>3a7a80cf90baf200787d3ffee0443c6a58aacb1f</Sha>
15+
<Sha>2c479f6a2492832f2078a92c9d0489193ff9edba</Sha>
1616
</Dependency>
1717
</ProductDependencies>
1818
<ToolsetDependencies>

packages.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
so we need to pull down this package so we can deploy it to Helix machines. -->
3535
<package id="Microsoft.VCRTForwarders.140" version="1.0.6" />
3636
<!-- Microsoft-WinUI-SDK repo (MSBuild and Visual Studio extensions for building, deploying, and debugging packaged applications.) -->
37-
<package id="Microsoft.Build.Msix" version="1.4.0-zmain.230310.1" />
37+
<package id="Microsoft.Build.Msix" version="1.4.0-zmain.240202.1" />
3838
<!-- Localized MUI and resw files -->
3939
<package id="Microsoft.Internal.WinUILocalizationResources" version="230926.0.0" />
4040
<!-- Windows SDK build tools (e.g. makeappx.exe) -->

0 commit comments

Comments
 (0)