mirror of
https://github.com/ChrisTitusTech/winutil
synced 2026-04-05 22:28:31 +00:00
Fix import / export config issue (#4189)
* apply toggle fix * apply fix that disables all toggles outside of config
This commit is contained in:
@@ -59,17 +59,19 @@ function Reset-WPFCheckBoxes {
|
|||||||
$sync.selectedApps | Foreach-Object { Add-SelectedAppsMenuItem -name $($sync.configs.applicationsHashtable.$_.Content) -key $_ }
|
$sync.selectedApps | Foreach-Object { Add-SelectedAppsMenuItem -name $($sync.configs.applicationsHashtable.$_.Content) -key $_ }
|
||||||
|
|
||||||
if($doToggles) {
|
if($doToggles) {
|
||||||
# Restore toggle switch states
|
# Restore toggle switch states from imported config.
|
||||||
|
# Only act on toggles that are explicitly listed in the import — toggles absent
|
||||||
|
# from the export file were not part of the saved config and should keep whatever
|
||||||
|
# state the live system already has (set during UI initialisation via Get-WinUtilToggleStatus).
|
||||||
$importedToggles = $sync.selectedToggles
|
$importedToggles = $sync.selectedToggles
|
||||||
$allToggles = $sync.GetEnumerator() | Where-Object { $_.Key -like "WPFToggle*" -and $_.Value -is [System.Windows.Controls.CheckBox] }
|
$allToggles = $sync.GetEnumerator() | Where-Object { $_.Key -like "WPFToggle*" -and $_.Value -is [System.Windows.Controls.CheckBox] }
|
||||||
foreach ($toggle in $allToggles) {
|
foreach ($toggle in $allToggles) {
|
||||||
if ($importedToggles -contains $toggle.Key) {
|
if ($importedToggles -contains $toggle.Key) {
|
||||||
$sync[$toggle.Key].IsChecked = $true
|
$sync[$toggle.Key].IsChecked = $true
|
||||||
Write-Debug "Restoring toggle: $($toggle.Key) = checked"
|
Write-Debug "Restoring toggle: $($toggle.Key) = checked"
|
||||||
} else {
|
|
||||||
$sync[$toggle.Key].IsChecked = $false
|
|
||||||
Write-Debug "Restoring toggle: $($toggle.Key) = unchecked"
|
|
||||||
}
|
}
|
||||||
|
# Toggles not present in the import are intentionally left untouched;
|
||||||
|
# their current UI state already reflects the real system state.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,7 +94,14 @@ function Invoke-WPFImpex {
|
|||||||
Update-WinUtilSelections -flatJson $flattenedJson
|
Update-WinUtilSelections -flatJson $flattenedJson
|
||||||
|
|
||||||
if (!$PARAM_NOUI) {
|
if (!$PARAM_NOUI) {
|
||||||
Reset-WPFCheckBoxes -doToggles $true
|
# Set flag so toggle Checked/Unchecked events don't trigger registry writes
|
||||||
|
# while we're programmatically restoring UI state from the imported config
|
||||||
|
$sync.ImportInProgress = $true
|
||||||
|
try {
|
||||||
|
Reset-WPFCheckBoxes -doToggles $true
|
||||||
|
} finally {
|
||||||
|
$sync.ImportInProgress = $false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
@@ -193,13 +193,19 @@ function Invoke-WPFUIElements {
|
|||||||
$sync[$entryInfo.Name].Add_Checked({
|
$sync[$entryInfo.Name].Add_Checked({
|
||||||
[System.Object]$Sender = $args[0]
|
[System.Object]$Sender = $args[0]
|
||||||
Invoke-WPFSelectedCheckboxesUpdate -type "Add" -checkboxName $Sender.name
|
Invoke-WPFSelectedCheckboxesUpdate -type "Add" -checkboxName $Sender.name
|
||||||
Invoke-WinUtilTweaks $Sender.name
|
# Skip applying tweaks while an import is restoring toggle states
|
||||||
|
if (-not $sync.ImportInProgress) {
|
||||||
|
Invoke-WinUtilTweaks $Sender.name
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
$sync[$entryInfo.Name].Add_Unchecked({
|
$sync[$entryInfo.Name].Add_Unchecked({
|
||||||
[System.Object]$Sender = $args[0]
|
[System.Object]$Sender = $args[0]
|
||||||
Invoke-WPFSelectedCheckboxesUpdate -type "Remove" -checkboxName $Sender.name
|
Invoke-WPFSelectedCheckboxesUpdate -type "Remove" -checkboxName $Sender.name
|
||||||
Invoke-WinUtiltweaks $Sender.name -undo $true
|
# Skip undoing tweaks while an import is restoring toggle states
|
||||||
|
if (-not $sync.ImportInProgress) {
|
||||||
|
Invoke-WinUtiltweaks $Sender.name -undo $true
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user