Skip to content

Feature: Added run as admin toggle to shortcut properties #10833

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 38 commits into from
Jan 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
05ff5ee
Run as admin for shortcuts
hecksmosis Dec 23, 2022
1ac966d
Fix network icon
hecksmosis Dec 24, 2022
5d1a8de
Fix formatting
hecksmosis Dec 24, 2022
c367fbf
Remove Resources.resw
hecksmosis Dec 25, 2022
9e9feb6
Merge branch 'fixNetIcon' of https://github.com/hecksmosis/Files into…
hecksmosis Dec 25, 2022
541bfa1
Merge branch 'main' into runasadministrator
hecksmosis Dec 25, 2022
4e6fce8
Remove DriveItem.cs
hecksmosis Dec 25, 2022
60f9f08
Merge branch 'runasadministrator' of https://github.com/hecksmosis/Fi…
hecksmosis Dec 25, 2022
85f11ed
Update PropertiesGeneral.xaml.cs
hecksmosis Dec 25, 2022
d0258dd
Merge branch 'main' into runasadministrator
hecksmosis Dec 26, 2022
eccaf82
Merge branch 'main' into runasadministrator
hecksmosis Dec 26, 2022
cd35091
Merge branch 'main' into runasadministrator
hecksmosis Dec 26, 2022
fe3b02f
Disable runasadmin for folder shortcuts and non-executable shortcuts
hecksmosis Dec 26, 2022
e76de2a
More fixes
hecksmosis Dec 26, 2022
5c65df2
Update PropertiesGeneral.xaml.cs
hecksmosis Dec 26, 2022
5cccaca
Remove unnecessary changes
hecksmosis Dec 26, 2022
3d0b29c
Merge branch 'main' into runasadministrator
hecksmosis Dec 27, 2022
07552fd
Move checkbox to shortcut section
hecksmosis Dec 27, 2022
0457d3f
cleanup
hecksmosis Dec 27, 2022
985a183
Remove unnecesary change
hecksmosis Dec 27, 2022
8152f54
Remove unnecesary change
hecksmosis Dec 27, 2022
6120f54
cleanup & fix formatting
gave92 Dec 27, 2022
41f6615
fix formatting
gave92 Dec 27, 2022
11ce84a
update all shortcut properties
gave92 Dec 27, 2022
b95e248
Merge branch 'main' into runasadministrator
hecksmosis Dec 27, 2022
59cc175
UI
yaira2 Dec 27, 2022
0b307ac
Remove unnecessary string from Resources.resw
hecksmosis Dec 27, 2022
22b025d
Merge branch 'main' into runasadministrator
hecksmosis Dec 28, 2022
229f228
Merge branch 'main' into runasadministrator
hecksmosis Dec 31, 2022
3e0b8ca
Do not display Run as admin for non-executable shortcuts
hecksmosis Jan 1, 2023
cc6e7ce
Merge branch 'main' into runasadministrator
hecksmosis Jan 1, 2023
dd57fd9
Fix spacing
hecksmosis Jan 3, 2023
5d2011a
Merge branch 'main' into runasadministrator
hecksmosis Jan 3, 2023
9562a85
Merge branch 'main' into runasadministrator
yaira2 Jan 4, 2023
aa55d70
Merge branch 'main' of https://github.com/files-community/Files into …
gave92 Jan 8, 2023
4c17a8d
Merge branch 'main' into runasadministrator
yaira2 Jan 11, 2023
fec19a9
Merge branch 'main' into runasadministrator
hecksmosis Jan 13, 2023
d0f6f26
Merge branch 'main' into runasadministrator
hecksmosis Jan 15, 2023
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
18 changes: 17 additions & 1 deletion src/Files.App/Helpers/UIFilesystemHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,7 @@ public static async Task CreateFolderWithSelectionAsync(IShellPage associatedIns
}

/// <summary>
/// Set a single file or folder to hidden or unhidden an refresh the
/// Set a single file or folder to hidden or unhidden and refresh the
/// view after setting the flag
/// </summary>
/// <param name="item"></param>
Expand All @@ -396,5 +396,21 @@ public static async Task CreateShortcutFromDialogAsync(IShellPage associatedInst
var dialogService = Ioc.Default.GetRequiredService<IDialogService>();
await dialogService.ShowDialogAsync(viewModel);
}

/// <summary>
/// Updates ListedItem properties for a shortcut
/// </summary>
/// <param name="item"></param>
/// <param name="targetPath"></param>
/// <param name="arguments"></param>
/// <param name="workingDir"></param>
/// <param name="runAsAdmin"></param>
public static void UpdateShortcutItemProperties(ShortcutItem item, string targetPath, string arguments, string workingDir, bool runAsAdmin)
{
item.TargetPath = targetPath;
item.Arguments = arguments;
item.WorkingDirectory = workingDir;
item.RunAsAdmin = runAsAdmin;
}
}
}
9 changes: 6 additions & 3 deletions src/Files.App/ViewModels/Properties/FileProperties.cs
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,15 @@ public override void GetBaseProperties()
ViewModel.ShortcutItemWorkingDirVisibility = Item.IsLinkItem || shortcutItem.IsSymLink ? false : true;
ViewModel.ShortcutItemArguments = shortcutItem.Arguments;
ViewModel.ShortcutItemArgumentsVisibility = Item.IsLinkItem || shortcutItem.IsSymLink ? false : true;
if (isApplication)
ViewModel.RunAsAdmin = shortcutItem.RunAsAdmin;
ViewModel.IsSelectedItemShortcut = FileExtensionHelpers.IsShortcutFile(Item.FileExtension);
ViewModel.ShortcutItemOpenLinkCommand = new RelayCommand(async () =>
{
if (Item.IsLinkItem)
{
var tmpItem = (ShortcutItem)Item;
await Win32Helpers.InvokeWin32ComponentAsync(ViewModel.ShortcutItemPath, AppInstance, ViewModel.ShortcutItemArguments, tmpItem.RunAsAdmin, ViewModel.ShortcutItemWorkingDir);
await Win32Helpers.InvokeWin32ComponentAsync(ViewModel.ShortcutItemPath, AppInstance, ViewModel.ShortcutItemArguments, ViewModel.RunAsAdmin, ViewModel.ShortcutItemWorkingDir);
}
else
{
Expand Down Expand Up @@ -311,16 +313,17 @@ private async void ViewModel_PropertyChanged(object sender, System.ComponentMode
}
break;

case "RunAsAdmin":
case "ShortcutItemPath":
case "ShortcutItemWorkingDir":
case "ShortcutItemArguments":
var tmpItem = (ShortcutItem)Item;
if (string.IsNullOrWhiteSpace(ViewModel.ShortcutItemPath))
return;

await FileOperationsHelpers.CreateOrUpdateLinkAsync(Item.ItemPath, ViewModel.ShortcutItemPath, ViewModel.ShortcutItemArguments, ViewModel.ShortcutItemWorkingDir, tmpItem.RunAsAdmin);
await FileOperationsHelpers.CreateOrUpdateLinkAsync(Item.ItemPath, ViewModel.ShortcutItemPath, ViewModel.ShortcutItemArguments, ViewModel.ShortcutItemWorkingDir, ViewModel.RunAsAdmin);
break;
}
}
}

}
18 changes: 18 additions & 0 deletions src/Files.App/ViewModels/SelectedItemsPropertiesViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -602,5 +602,23 @@ public bool IsHidden
get => isHidden;
set => SetProperty(ref isHidden, value);
}

private bool runAsAdmin;
public bool RunAsAdmin
{
get => runAsAdmin;
set
{
RunAsAdminEnabled = true;
SetProperty(ref runAsAdmin, value);
}
}

private bool runAsAdminEnabled;
public bool RunAsAdminEnabled
{
get => runAsAdminEnabled;
set => SetProperty(ref runAsAdminEnabled, value);
}
}
}
12 changes: 12 additions & 0 deletions src/Files.App/Views/Pages/PropertiesShortcut.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ms-appx:///ResourceDictionaries/PropertiesStyles.xaml" />
<ResourceDictionary Source="ms-appx:///ResourceDictionaries/RightAlignedToggleSwitchStyle.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</local:PropertiesTab.Resources>
Expand Down Expand Up @@ -127,6 +128,17 @@
Text="{x:Bind ViewModel.ShortcutItemWorkingDir, Mode=TwoWay}" />
</Grid>

<local1:SettingsBlockControl
x:Name="RunAsAdminCheckbox"
Title="{helpers:ResourceString Name=RunAsAdministrator}"
HorizontalAlignment="Stretch"
x:Load="{x:Bind ViewModel.RunAsAdminEnabled, Mode=OneWay}">
<ToggleSwitch
AutomationProperties.Name="{helpers:ResourceString Name=RunAsAdministrator}"
IsOn="{x:Bind ViewModel.RunAsAdmin, Mode=TwoWay}"
Style="{StaticResource RightAlignedToggleSwitchStyle}" />
</local1:SettingsBlockControl>

<local1:SettingsBlockControl
x:Name="OpenFileLocation"
Title="{helpers:ResourceString Name=OpenFileLocation}"
Expand Down
25 changes: 23 additions & 2 deletions src/Files.App/Views/Pages/PropertiesShortcut.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
using CommunityToolkit.WinUI;
using Files.App.Filesystem;
using Files.App.ViewModels.Properties;
using Files.App.Helpers;
using System.Threading.Tasks;

namespace Files.App.Views
Expand All @@ -10,9 +13,27 @@ public PropertiesShortcut()
InitializeComponent();
}

public override Task<bool> SaveChangesAsync()
public override async Task<bool> SaveChangesAsync()
{
return Task.FromResult(true);
var shortcutItem = BaseProperties switch
{
FileProperties properties => properties.Item,
FolderProperties properties => properties.Item,
_ => null
} as ShortcutItem;

if (shortcutItem is null)
return true;

await App.Window.DispatcherQueue.EnqueueAsync(() =>
UIFilesystemHelpers.UpdateShortcutItemProperties(shortcutItem,
ViewModel.ShortcutItemPath,
ViewModel.ShortcutItemArguments,
ViewModel.ShortcutItemWorkingDir,
ViewModel.RunAsAdmin)
);

return true;
}

public override void Dispose()
Expand Down