Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 17 additions & 4 deletions Files/App.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ protected override async void OnActivated(IActivatedEventArgs args)

if (parsedCommands != null && parsedCommands.Count > 0)
{
async Task PerformNavigation(string payload)
async Task PerformNavigation(string payload, string selectItem = null)
{
if (!string.IsNullOrEmpty(payload))
{
Expand All @@ -380,13 +380,18 @@ async Task PerformNavigation(string payload)
payload = folder.Path; // Convert short name to long name (#6190)
}
}
var paneNavigationArgs = new PaneNavigationArguments
{
LeftPaneNavPathParam = payload,
LeftPaneSelectItemParam = selectItem,
};
if (rootFrame.Content != null)
{
await MainPageViewModel.AddNewTabByPathAsync(typeof(PaneHolderPage), payload);
await MainPageViewModel.AddNewTabByParam(typeof(PaneHolderPage), paneNavigationArgs);
}
else
{
rootFrame.Navigate(typeof(MainPage), payload, new SuppressNavigationTransitionInfo());
rootFrame.Navigate(typeof(MainPage), paneNavigationArgs, new SuppressNavigationTransitionInfo());
}
}
foreach (var command in parsedCommands)
Expand All @@ -396,7 +401,15 @@ async Task PerformNavigation(string payload)
case ParsedCommandType.OpenDirectory:
case ParsedCommandType.OpenPath:
case ParsedCommandType.ExplorerShellCommand:
await PerformNavigation(command.Payload);
var selectItemCommand = parsedCommands.FirstOrDefault(x => x.Type == ParsedCommandType.SelectItem);
await PerformNavigation(command.Payload, selectItemCommand?.Payload);
break;

case ParsedCommandType.SelectItem:
if (Path.IsPathRooted(command.Payload))
{
await PerformNavigation(Path.GetDirectoryName(command.Payload), Path.GetFileName(command.Payload));
}
break;

case ParsedCommandType.Unknown:
Expand Down
4 changes: 4 additions & 0 deletions Files/CommandLine/CommandLineParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ private static ParsedCommands ParseSplitArguments(List<KeyValuePair<string, stri
command.Type = ParsedCommandType.OutputPath;
break;

case string s when "-Select".Equals(s, StringComparison.OrdinalIgnoreCase):
command.Type = ParsedCommandType.SelectItem;
break;

default:
//case "-Cmdless":
try
Expand Down
1 change: 1 addition & 0 deletions Files/CommandLine/ParsedCommandType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ internal enum ParsedCommandType
OpenPath,
ExplorerShellCommand,
OutputPath,
SelectItem,
}
}
4 changes: 4 additions & 0 deletions Files/ViewModels/MainPageViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,10 @@ public async void OnNavigatedTo(NavigationEventArgs e)
{
await AddNewTabByPathAsync(typeof(PaneHolderPage), navArgs);
}
else if (e.Parameter is PaneNavigationArguments paneArgs)
{
await AddNewTabByParam(typeof(PaneHolderPage), paneArgs);
}
else if (e.Parameter is TabItemArguments tabArgs)
{
await AddNewTabByParam(tabArgs.InitialPageType, tabArgs.NavigationArg);
Expand Down
15 changes: 8 additions & 7 deletions Files/Views/ColumnShellPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ protected override void OnNavigatedTo(NavigationEventArgs eventArgs)
{
base.OnNavigatedTo(eventArgs);
Column = (eventArgs.Parameter as ColumnParam).Column;
NavParams = (eventArgs.Parameter as ColumnParam).Path.ToString();
NavParams = new NavigationParams { NavPath = (eventArgs.Parameter as ColumnParam).Path.ToString() };
}

private void AppSettings_SortDirectionPreferenceUpdated(object sender, SortDirection e)
Expand Down Expand Up @@ -435,10 +435,10 @@ await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
}
}

private string navParams;
private NavigationParams navParams;
private int Column;

public string NavParams
public NavigationParams NavParams
{
get => navParams;
set
Expand All @@ -456,12 +456,12 @@ public string NavParams

private void OnNavigationParamsChanged()
{
if (string.IsNullOrEmpty(NavParams) || NavParams == "Home".GetLocalized())
if (string.IsNullOrEmpty(NavParams?.NavPath) || NavParams.NavPath == "Home".GetLocalized())
{
ItemDisplayFrame.Navigate(typeof(WidgetsPage),
new NavigationArguments()
{
NavPathParam = NavParams,
NavPathParam = NavParams?.NavPath,
AssociatedTabInstance = this
});
}
Expand All @@ -470,14 +470,15 @@ private void OnNavigationParamsChanged()
ItemDisplayFrame.Navigate(typeof(ColumnViewBase),
new NavigationArguments()
{
NavPathParam = NavParams,
NavPathParam = NavParams.NavPath,
SelectItems = !string.IsNullOrWhiteSpace(NavParams.SelectItem) ? new[] { NavParams.SelectItem } : null,
AssociatedTabInstance = this
});
}
}

public static readonly DependencyProperty NavParamsProperty =
DependencyProperty.Register("NavParams", typeof(string), typeof(ColumnShellPage), new PropertyMetadata(null));
DependencyProperty.Register("NavParams", typeof(NavigationParams), typeof(ColumnShellPage), new PropertyMetadata(null));

private TabItemArguments tabItemArguments;

Expand Down
30 changes: 22 additions & 8 deletions Files/Views/ModernShellPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,14 @@ private void ModernShellPage_BackNavRequested(object sender, EventArgs e)
protected override void OnNavigatedTo(NavigationEventArgs eventArgs)
{
base.OnNavigatedTo(eventArgs);
NavParams = eventArgs.Parameter.ToString();
if (eventArgs.Parameter is string navPath)
{
NavParams = new NavigationParams { NavPath = navPath };
}
else if (eventArgs.Parameter is NavigationParams navParams)
{
NavParams = navParams;
}
}

private void AppSettings_SortDirectionPreferenceUpdated(object sender, SortDirection e)
Expand Down Expand Up @@ -469,9 +476,9 @@ await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
}
}

private string navParams;
private NavigationParams navParams;

public string NavParams
public NavigationParams NavParams
{
get => navParams;
set
Expand All @@ -489,28 +496,29 @@ public string NavParams

private void OnNavigationParamsChanged()
{
if (string.IsNullOrEmpty(NavParams) || NavParams == "Home".GetLocalized())
if (string.IsNullOrEmpty(NavParams?.NavPath) || NavParams.NavPath == "Home".GetLocalized())
{
ItemDisplayFrame.Navigate(typeof(WidgetsPage),
new NavigationArguments()
{
NavPathParam = NavParams,
NavPathParam = NavParams?.NavPath,
AssociatedTabInstance = this
}, new EntranceNavigationTransitionInfo());
}
else
{
ItemDisplayFrame.Navigate(InstanceViewModel.FolderSettings.GetLayoutType(NavParams),
ItemDisplayFrame.Navigate(InstanceViewModel.FolderSettings.GetLayoutType(NavParams.NavPath),
new NavigationArguments()
{
NavPathParam = NavParams,
NavPathParam = NavParams.NavPath,
SelectItems = !string.IsNullOrWhiteSpace(NavParams?.SelectItem) ? new[] { NavParams.SelectItem } : null,
AssociatedTabInstance = this
});
}
}

public static readonly DependencyProperty NavParamsProperty =
DependencyProperty.Register("NavParams", typeof(string), typeof(ModernShellPage), new PropertyMetadata(null));
DependencyProperty.Register("NavParams", typeof(NavigationParams), typeof(ModernShellPage), new PropertyMetadata(null));

private TabItemArguments tabItemArguments;

Expand Down Expand Up @@ -1130,6 +1138,12 @@ public class PathBoxItem
public string Path { get; set; }
}

public class NavigationParams
{
public string NavPath { get; set; }
public string SelectItem { get; set;}
}

public class NavigationArguments
{
public string NavPathParam { get; set; } = null;
Expand Down
42 changes: 27 additions & 15 deletions Files/Views/PaneHolderPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,9 @@ public bool IsMultiPaneEnabled
get => UserSettingsService.MultitaskingSettingsService.IsDualPaneEnabled && !(Window.Current.Bounds.Width <= 750);
}

private string navParamsLeft;
private NavigationParams navParamsLeft;

public string NavParamsLeft
public NavigationParams NavParamsLeft
{
get => navParamsLeft;
set
Expand All @@ -98,9 +98,9 @@ public string NavParamsLeft
}
}

private string navParamsRight;
private NavigationParams navParamsRight;

public string NavParamsRight
public NavigationParams NavParamsRight
{
get => navParamsRight;
set
Expand Down Expand Up @@ -227,13 +227,21 @@ protected override void OnNavigatedTo(NavigationEventArgs eventArgs)

if (eventArgs.Parameter is string navPath)
{
NavParamsLeft = navPath;
NavParamsRight = "Home".GetLocalized();
NavParamsLeft = new NavigationParams { NavPath = navPath };
NavParamsRight = new NavigationParams { NavPath = "Home".GetLocalized() };
}
if (eventArgs.Parameter is PaneNavigationArguments paneArgs)
{
NavParamsLeft = paneArgs.LeftPaneNavPathParam;
NavParamsRight = paneArgs.RightPaneNavPathParam;
NavParamsLeft = new NavigationParams
{
NavPath = paneArgs.LeftPaneNavPathParam,
SelectItem = paneArgs.LeftPaneSelectItemParam
};
NavParamsRight = new NavigationParams
{
NavPath = paneArgs.RightPaneNavPathParam,
SelectItem = paneArgs.RightPaneSelectItemParam
};
IsRightPaneVisible = IsMultiPaneEnabled && paneArgs.RightPaneNavPathParam != null;
}

Expand All @@ -242,8 +250,10 @@ protected override void OnNavigatedTo(NavigationEventArgs eventArgs)
InitialPageType = typeof(PaneHolderPage),
NavigationArg = new PaneNavigationArguments()
{
LeftPaneNavPathParam = NavParamsLeft,
RightPaneNavPathParam = IsRightPaneVisible ? NavParamsRight : null
LeftPaneNavPathParam = NavParamsLeft?.NavPath,
LeftPaneSelectItemParam = NavParamsLeft?.SelectItem,
RightPaneNavPathParam = IsRightPaneVisible ? NavParamsRight?.NavPath : null,
RightPaneSelectItemParam = IsRightPaneVisible ? NavParamsRight?.SelectItem : null,
}
};
}
Expand Down Expand Up @@ -288,7 +298,7 @@ private void Pane_ContentChanged(object sender, TabItemArguments e)
public void OpenPathInNewPane(string path)
{
IsRightPaneVisible = true;
NavParamsRight = path;
NavParamsRight = new NavigationParams { NavPath = path };
}

private void KeyboardAccelerator_Invoked(KeyboardAccelerator sender, KeyboardAcceleratorInvokedEventArgs args)
Expand All @@ -310,9 +320,9 @@ private void KeyboardAccelerator_Invoked(KeyboardAccelerator sender, KeyboardAcc
case (true, true, false, VirtualKey.Right): // ctrl + shift + "->" select right pane
if (UserSettingsService.MultitaskingSettingsService.IsDualPaneEnabled)
{
if (string.IsNullOrEmpty(NavParamsRight))
if (string.IsNullOrEmpty(NavParamsRight?.NavPath))
{
NavParamsRight = "Home".GetLocalized();
NavParamsRight = new NavigationParams { NavPath = "Home".GetLocalized() };
}
IsRightPaneVisible = true;
ActivePane = PaneRight;
Expand All @@ -326,9 +336,9 @@ private void KeyboardAccelerator_Invoked(KeyboardAccelerator sender, KeyboardAcc
case (false, true, true, VirtualKey.Add): // alt + shift + "+" open pane
if (UserSettingsService.MultitaskingSettingsService.IsDualPaneEnabled)
{
if (string.IsNullOrEmpty(NavParamsRight))
if (string.IsNullOrEmpty(NavParamsRight?.NavPath))
{
NavParamsRight = "Home".GetLocalized();
NavParamsRight = new NavigationParams { NavPath = "Home".GetLocalized() };
}
IsRightPaneVisible = true;
}
Expand Down Expand Up @@ -369,6 +379,8 @@ public void Dispose()
public class PaneNavigationArguments
{
public string LeftPaneNavPathParam { get; set; } = null;
public string LeftPaneSelectItemParam { get; set; } = null;
public string RightPaneNavPathParam { get; set; } = null;
public string RightPaneSelectItemParam { get; set; } = null;
}
}