# Changelog

All notable changes to this project are documented here, with references to the corresponding [README.md](README.md) sections.

## 2.3.1 — 2026-06-20

### Added
- **3 new Visual Performance checkboxes** (see README [Visual Performance Tweaks](#visual-performance-tweaks)):
  - **Disable Window Dragging Contents** — sets `Control Panel\Desktop\DragFullWindows = "0"`
  - **Disable Thumbnail Previews** — sets `Explorer\Advanced\IconsOnly = 1`
  - **Disable Aero Shake** — sets `Explorer\Advanced\DisallowShaking = 1`
- **Multi-select backup deletion** — `LsvBackups.MultiSelect = True`; `BtnDeleteBackup_Click` iterates all `SelectedItems` with individual error handling. New i18n keys: `delete_prompt_multi`, `delete_multi_summary`.
- **Theme system** — `ThemeManager.vb` with 6 themes (Light, Dark, Midnight, Enterprise, Business, Corporate), ~28 color tokens each, sidebar coloring. Persisted in `settings.json`.
- **App icons** — multi-resolution `app.ico` (16–256px) and `logo.png` for About dialog.
- **Enable/disable toggle logic** — `BtnVisualApply_Click` now uses `If/Else` for every checkbox: unchecking applies the Windows-default value instead of doing nothing. Applies to all 11 visual toggles + BestPerformance.

### Changed
- **Backup JSON serialization fixed** — `Form1.vb:477` replaced `meta.Union(jsonList).ToList()` (produced malformed `{"Key":"__meta__","Value":{…}}`) with `List(Of Object)` pattern matching `CreateFullBackup`. Restore (`RestoreFromFile` line 584) now correctly identifies `__meta__` via `TryGetProperty`.
- **Visual tab label mismatches corrected** (README [Visual Performance](#1-visual-performance-tab) table updated):
  - `ChkDisableShadows`: "Disable Window Shadow Effects" → "Disable Desktop Preview & List Shadows" (controls `DisablePreviewDesktop` + `ListviewShadow`)
  - `ChkDisableTooltipAnim`: "Disable Tooltip Animations" → "Disable Notification Balloons" (controls `EnableBalloonTips`)
  - `ChkDisableComboAnim`: "Disable Combo Box Animations" → "Disable Smooth Scrolling" (controls `SmoothScroll`)
- **`ChkDisableWinAnim` removed** — was an exact duplicate of `ChkDisableAnimations` (both checked `MinAnimate`). Removed from `Form1.vb`, `Form1.Designer.vb`, and all 7 language JSON files.
- **ChkDisableShadows sync** now verifies both `DisablePreviewDesktop = 1` AND `ListviewShadow = 0`.
- **Visual tab layout** — Y-coordinates recalculated after removal of duplicate checkbox and addition of 3 new ones; all 12 checkboxes use 33px spacing.
- **Cleanup error handling** — `BtnCleanupRun_Click` wrapped in `Try/Catch`.

### File Changes Summary

| File | Change |
|---|---|
| `Form1.vb` | Backup JSON fix (L477); `BtnVisualApply_Click` If/Else toggle; 11 new `ApplyVisual*Enable` methods + `ApplyVisualRestorePerformance`; 6 new `ApplyVisualDisable/EnableDragFull/Thumbnails/Shake`; multi-select delete; removed `ChkDisableWinAnim` references |
| `Form1.Designer.vb` | Added 3 new checkbox declarations & property blocks; `LsvBackups.MultiSelect = True`; removed `ChkDisableWinAnim`; adjusted Y-coords |
| `ThemeManager.vb` | New file, ~460 lines — 6 themes, load/save/apply/sidebar color |
| `LanguageManager.vb` | Added `Theme` property to `SettingsData` |
| `Lang/en.json` | 3 new label+tip keys; 1 new multi-delete key; updated 3 stale labels; removed `ChkDisableWinAnim` |
| `Lang/de,es,fr,ja,pt,zh.json` | Updated labels to match en.json |
| `Resources/app.ico`, `logo.png` | New application icons |
| `WindowsTweaker.vbproj` | Added `ApplicationIcon` |
| `CHANGES.md` | This changelog |
| `update-changelog.ps1` | Script to auto-generate changelog from README sections |

## Auto-Update

Run `update-changelog.ps1` to regenerate the changelog entry using the current README.md sections:

```powershell
./update-changelog.ps1 -Version "2.3.1" -Date "2026-06-20"
```

Omit params to default to `2.3.1` and today's date. The script extracts `###` section headers from README.md and builds a draft entry — edit `CHANGES.md` afterward to add specific file/feature details. Run it as part of your release workflow to keep the changelog in sync with the README.
