From e1f8a9842a9af1ffbf679baf6021e03cd1031d49 Mon Sep 17 00:00:00 2001 From: "seer-by-sentry[bot]" <157164994+seer-by-sentry[bot]@users.noreply.github.com> Date: Wed, 20 Aug 2025 04:45:53 +0000 Subject: [PATCH 1/2] Fix: Prevent exceptions when available size is zero or negative --- .../BreadcrumbBar/BreadcrumbBarLayout.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarLayout.cs b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarLayout.cs index 42f107a96712..d1bc93053aaa 100644 --- a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarLayout.cs +++ b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarLayout.cs @@ -33,6 +33,13 @@ protected override Size MeasureOverride(NonVirtualizingLayoutContext context, Si var accumulatedSize = new Size(0, 0); _availableSize = availableSize; + // Ensure we have a minimum size to prevent DivideByZeroException in WinUI + // When availableSize has zero dimensions, provide a minimal positive size for measurement + var measureSize = new Size( + Math.Max(availableSize.Width, 1.0), + Math.Max(availableSize.Height, 1.0) + ); + var indexAfterEllipsis = GetFirstIndexToRender(context); // Go through all items and measure them @@ -40,7 +47,7 @@ protected override Size MeasureOverride(NonVirtualizingLayoutContext context, Si { if (context.Children[index] is BreadcrumbBarItem breadcrumbItem) { - breadcrumbItem.Measure(availableSize); + breadcrumbItem.Measure(measureSize); accumulatedSize.Width += index < indexAfterEllipsis ? 0 : breadcrumbItem.DesiredSize.Width; accumulatedSize.Height = Math.Max(accumulatedSize.Height, breadcrumbItem.DesiredSize.Height); } @@ -98,6 +105,10 @@ private int GetFirstIndexToRender(NonVirtualizingLayoutContext context) var itemCount = context.Children.Count; var accumulatedWidth = 0d; + // Handle zero or negative available width - hide all items + if (_availableSize.Width <= 0) + return itemCount; + // Go through all items from the last item for (int index = itemCount - 1; index >= 0; index--) { From 813a61a0fe6e96c6e80692a0a363b6a9264c5965 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Thu, 21 Aug 2025 00:21:14 -0400 Subject: [PATCH 2/2] Update BreadcrumbBarLayout.cs --- .../BreadcrumbBar/BreadcrumbBarLayout.cs | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarLayout.cs b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarLayout.cs index d1bc93053aaa..5e1cb05089eb 100644 --- a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarLayout.cs +++ b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarLayout.cs @@ -33,13 +33,6 @@ protected override Size MeasureOverride(NonVirtualizingLayoutContext context, Si var accumulatedSize = new Size(0, 0); _availableSize = availableSize; - // Ensure we have a minimum size to prevent DivideByZeroException in WinUI - // When availableSize has zero dimensions, provide a minimal positive size for measurement - var measureSize = new Size( - Math.Max(availableSize.Width, 1.0), - Math.Max(availableSize.Height, 1.0) - ); - var indexAfterEllipsis = GetFirstIndexToRender(context); // Go through all items and measure them @@ -47,7 +40,7 @@ protected override Size MeasureOverride(NonVirtualizingLayoutContext context, Si { if (context.Children[index] is BreadcrumbBarItem breadcrumbItem) { - breadcrumbItem.Measure(measureSize); + breadcrumbItem.Measure(availableSize); accumulatedSize.Width += index < indexAfterEllipsis ? 0 : breadcrumbItem.DesiredSize.Width; accumulatedSize.Height = Math.Max(accumulatedSize.Height, breadcrumbItem.DesiredSize.Height); } @@ -122,4 +115,4 @@ private int GetFirstIndexToRender(NonVirtualizingLayoutContext context) return 0; } } -} +} \ No newline at end of file