Skip to content

Releases: MeowIce/LidDock

LidDock v1.0.1

Choose a tag to compare

@MeowIce MeowIce released this 30 Aug 07:00

Changes since last stable release:

  • Added installer/uninstaller using Inno Setup.
  • Optimized background daemon memory footprint.
  • Reduced install size.
  • Improved upgrade path from v1.0.0

1.0.1-DEV-1

1.0.1-DEV-1 Pre-release
Pre-release

Choose a tag to compare

@MeowIce MeowIce released this 30 Aug 03:23

Added installer/uninstaller using Inno Setup.

LidDock v1.0.0

Choose a tag to compare

@MeowIce MeowIce released this 29 Aug 17:44

This is the first release of LidDock, version 1.0.0
Changes after DEV-2:

  • Added app icon. Special thanks to @aprlnnf for designing the LidDock app icon :)
  • Accent Color support

LidDock v1.0.0 DEV-2

LidDock v1.0.0 DEV-2 Pre-release
Pre-release

Choose a tag to compare

@MeowIce MeowIce released this 28 Aug 14:23

Release Notes - LidDock v1.0.0 DEV-2

Highlights

  • Massive Memory Reduction: WPF App UI physical RAM (Working Set) reduced from ~121.5 MB down to ~6.4 MB (over 94% reduction). Background Daemon stabilized at an ultralight footprint of ~340 KB Working Set and 0.00% idle CPU.
  • Critical Safety Sleep Fix: Resolved an issue where abrupt dock disconnection while the lid was closed only turned off the screen instead of putting the laptop to sleep. The system now properly invokes native Win32 SetSuspendState.
  • Concurrency & Display Fixes: Fixed a timer cancellation race condition during the safety grace period and corrected display detection logic for Miracast wireless monitors.
  • Full Code Cleanup: Eliminated dead Win32 P/Invoke declarations, unused structs, obsolete interface methods, and unused events across the solution.

What's Changed

1. Memory & Performance Optimizations

  • Post-Render Memory Purge: Integrated automated working set trimming 800ms after XAML visual tree layout renders, purging transient parser caches and dropping UI memory from ~121.5 MB to ~6.4 MB.
  • Software Rendering Mode: Configured WPF render pipeline to software-only mode to prevent unnecessary DirectX 3D virtual address commitments while preserving smooth Fluent Mica and Acrylic backdrops via DWM.
  • Workstation GC & Runtime Trim Flags: Added runtime configuration flags (ServerGarbageCollection=false, TieredCompilation=false, GarbageCollectionAdaptationMode=0) to restrict virtual memory expansion.
  • Static HICON Caching: Cached all 6 tray state icons inside daemonTrayManager, eliminating GDI bitmap churn, memory DC re-allocations, and handle churn on every display/power status update.
  • Debounced Working Set Trimming: Implemented a 3-second debounced background trimmer in the Daemon to automatically reclaim working set memory back to the ~340 KB floor after docking, power events, or tray menu interactions.
  • Win32 Window Lookup: Replaced process table enumeration (Process.GetProcessesByName) with native Win32 FindWindowW in nativeTrayMenu, preventing memory spikes in the Daemon when opening Settings.
  • Zero-Allocation Diagnostics Logger: Converted diagnosticsLogger from a node-allocating LinkedList to a static circular array buffer (logEntry[128]), eliminating GC pressure during logging.
  • Redundant Power Scheme Filtering: Added cache guards in powerSchemeManager to skip redundant Win32 registry writes and kernel notifications when the target power action already matches active settings.

2. Critical Bug Fixes & Reliability

  • Safety Sleep Enforcement: Fixed triggerImmediateSleep in powerSchemeManager to invoke powrprof.dll!SetSuspendState(false, false, false) instead of posting monitor power-off commands (SC_MONITORPOWER), preventing closed laptops from overheating in backpacks when undocked.
  • Grace Period Timer Race Condition: Fixed an ObjectDisposedException race condition in clamshellStateMachine where canceling the grace period timer could still trigger system sleep if the task faulted during cancellation.
  • Miracast Display Filtering: Decoupled displayTechnology.miracast from the isVirtual flag in displayWatcher, ensuring that ignoreVirtualDisplays no longer overrides the independent ignoreWirelessDisplays setting.

3. Code Cleanup & Architectural Hygiene

  • Removed Unused Win32 P/Invokes: Removed dead createProcess and closeHandle declarations, as well as unused startupInfo and processInformation structs from nativeMethods.
  • Removed Dead Methods & Events: Removed uncalled forceReevaluate() from iClamshellStateMachine and clamshellStateMachine, unreferenced cmdProfileCustom menu constant from nativeTrayMenu, and unsubscribed onSettingsChanged event from settingsManager.
  • Preserved Backward Compatibility: Maintained AppSettings schema fields to ensure existing user configuration files (settings.json) remain fully compatible without schema corruption.

4. Documentation & UX

  • Accurate Tray Icon Status Colors: Documented all tray icon indicator colors in README (Blue: Docked Lid Open; Green: Clamshell Active; Orange: Disconnect Grace Period Countdown; Gray: Standard Sleep Mode).
  • How to Use Guide: Added a comprehensive user guide covering first-time setup, daily docking workflows, and accidental disconnect protections.
  • Streamlined Profiles: Removed all references to the obsolete Custom profile from documentation and codebase.

First DEV release of LidDock. Yay !

Pre-release

Choose a tag to compare

@MeowIce MeowIce released this 28 Aug 05:52

Brought macOS clamshell experience to Windows 11.