Skip to content

Commit bd99607

Browse files
authored
Feature: Always apply most current layout (#11851)
1 parent 0221243 commit bd99607

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

src/Files.App/BaseLayout.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,7 @@ protected virtual void BaseFolderSettings_LayoutModeChangeRequested(object? send
382382

383383
// Remove old layout from back stack
384384
ParentShellPageInstance.RemoveLastPageFromBackStack();
385+
ParentShellPageInstance.ResetNavigationStackLayoutMode();
385386
}
386387

387388
ParentShellPageInstance.FilesystemViewModel.UpdateEmptyTextType();

src/Files.App/IShellPage.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ public interface IShellPage : ITabItemContent, IMultiPaneInfo, IDisposable
5353

5454
void RemoveLastPageFromBackStack();
5555

56+
/// <summary>
57+
/// Replaces any outdated entries with those of the correct page type
58+
/// </summary>
59+
void ResetNavigationStackLayoutMode();
60+
5661
void SubmitSearch(string query, bool searchUnindexedItems);
5762

5863
/// <summary>

src/Files.App/Views/BaseShellPage.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,39 @@ public virtual void Forward_Click()
499499
ItemDisplay.GoForward();
500500
}
501501

502+
public void ResetNavigationStackLayoutMode()
503+
{
504+
foreach (PageStackEntry entry in ItemDisplay.BackStack.ToList())
505+
{
506+
if (entry.Parameter is NavigationArguments args)
507+
{
508+
var correctPageType = FolderSettings.GetLayoutType(args.NavPathParam);
509+
if (!entry.SourcePageType.Equals(correctPageType))
510+
{
511+
int index = ItemDisplay.BackStack.IndexOf(entry);
512+
var newEntry = new PageStackEntry(correctPageType, entry.Parameter, entry.NavigationTransitionInfo);
513+
ItemDisplay.BackStack.RemoveAt(index);
514+
ItemDisplay.BackStack.Insert(index, newEntry);
515+
}
516+
}
517+
}
518+
519+
foreach (PageStackEntry entry in ItemDisplay.ForwardStack.ToList())
520+
{
521+
if (entry.Parameter is NavigationArguments args)
522+
{
523+
var correctPageType = FolderSettings.GetLayoutType(args.NavPathParam);
524+
if (!entry.SourcePageType.Equals(correctPageType))
525+
{
526+
int index = ItemDisplay.ForwardStack.IndexOf(entry);
527+
var newEntry = new PageStackEntry(correctPageType, entry.Parameter, entry.NavigationTransitionInfo);
528+
ItemDisplay.ForwardStack.RemoveAt(index);
529+
ItemDisplay.ForwardStack.Insert(index, newEntry);
530+
}
531+
}
532+
}
533+
}
534+
502535
public void RemoveLastPageFromBackStack()
503536
{
504537
ItemDisplay.BackStack.Remove(ItemDisplay.BackStack.Last());

0 commit comments

Comments
 (0)