No description
- F# 98.6%
- PowerShell 1.4%
## Major Features Added: - **Pure Windows Shell_NotifyIcon implementation** - Bypasses Avalonia for proper Windows tray behavior - **Custom ICO file support** - Added app-icon-new.ico with proper loading from Assets - **Full preset integration** - All saved presets now appear in tray context menu with proper state synchronization - **Windows-standard menu positioning** - Right-click menus appear at cursor position using TrackPopupMenu - **Enhanced menu structure** - Organized presets with separators and system actions ## Critical Bug Fixes: - **Fixed preset loading issue** - UIStateManager now properly initialized with loaded presets from disk - **Removed misleading keyboard shortcuts** - Eliminated non-functional placeholder shortcuts (Ctrl+1-9, F5, Alt+F4) - **Eliminated emoji display issues** - Removed Unicode emojis that showed as ?? in Windows tray menus - **Fixed state synchronization** - Bridge between legacy UIState and new UIStateManager systems ## Technical Improvements: - **Code cleanup and consolidation** - Removed duplicate Avalonia fallback code, created reusable helpers - **Enhanced error handling** - Proper fallback mechanisms for cross-platform compatibility - **Better icon management** - ICO file properly copied to output directory for Windows Shell_NotifyIcon - **Clean menu display** - Tab-separated shortcut display format (when shortcuts are actually implemented) ## Files Changed: - Renamed TrayManager.fs → TraySystem.fs with complete rewrite using Windows P/Invoke - Added Assets/app-icon-new.ico for native Windows system tray support - Updated ApplicationRunner.fs with proper UIStateManager initialization - Enhanced project file with ICO asset configuration and build copying - Fixed ApplicationConfiguration.fs and ApplicationState.fs type definitions ## Menu Structure (No Fake Shortcuts): ``` Display Presets My Gaming Setup Work Configuration Presentation Mode ──────────────────────────── Show DisplaySwitch-Pro Refresh Displays Settings... ──────────────────────────── Exit ``` ## What Works Now: ✅ Pure Windows system tray with custom icon ✅ All saved presets appear in tray menu ✅ Right-click shows menu at cursor position ✅ Left-click and double-click handling ✅ Window minimize/close to tray functionality ✅ Cross-platform Avalonia fallback ✅ Honest menu display (no fake shortcuts) ## What's Still Needed: - Actual keyboard shortcut implementation (global hotkeys) - Preset application from tray menu (action handlers) - System-wide hotkey registration This commit establishes a solid foundation for Windows system tray functionality with proper native behavior and accurate UI representation. |
||
|---|---|---|
| API | ||
| Assets | ||
| Core | ||
| references | ||
| UI | ||
| .gitignore | ||
| app.manifest | ||
| application-state-domain-analysis.md | ||
| ApplicationConfiguration.fs | ||
| ApplicationLifecycle.fs | ||
| ApplicationState.fs | ||
| ApplicationStateManager.fs | ||
| ApplicationStateSimplified.fs | ||
| appsettings.json | ||
| AppState.fs | ||
| CLAUDE.md | ||
| core-domain-analysis.md | ||
| display-canvas-domain-analysis.md | ||
| DisplaySwitch-Pro.fsproj | ||
| DomainCoordination.fs | ||
| master-domain-analysis.md | ||
| preset-key-bindings-implementation.md | ||
| preset-management-domain-analysis.md | ||
| Program.fs | ||
| README.md | ||
| system-tray-implementation.md | ||
| ui-orchestration-domain-analysis.md | ||
| windows-api-domain-analysis.md | ||
DisplaySwitch-Pro
A modern F# application for managing multiple display configurations with Avalonia UI.
What We Have
Core Features
- Display Detection: Automatic detection of connected displays and their capabilities
- Enable/Disable Displays: Working display control including TV hardware support
- Display Configuration: Resolution, refresh rate, and orientation management
- Primary Display Selection: Set any display as primary
- Visual UI: Drag-and-drop display arrangement canvas with theme support
Technical Implementation
- F# Functional Architecture: Pure functions with Result types for error handling
- Windows CCD API Integration: Modern display configuration using Connecting and Configuring Displays API
- Avalonia UI Framework: Cross-platform modern UI with dark/light themes
- Comprehensive Validation: Multi-method display state verification
What Needs Implementation
Configuration Management
- Save/Load Presets: Store and restore display configurations
- Auto-Apply on Startup: Remember and restore preferred display setup
- Profile Management: Multiple configuration profiles for different scenarios
Advanced Display Features
- Hotplug Detection: Automatic response to display connect/disconnect events
- Resolution Optimization: Intelligent resolution selection based on display capabilities
- Multi-Display Positioning: Smart positioning algorithms for complex layouts
User Experience
- Settings Persistence: Remember user preferences and window positions
- Keyboard Shortcuts: Quick display switching via hotkeys
- System Tray Integration: Background operation with tray controls
- Command Line Interface: Scriptable display operations
Platform Support
- Linux/macOS Support: Extend beyond Windows using platform adapters
- GPU-Specific Optimizations: Enhanced support for different graphics drivers
Build & Run
# Build and run
dotnet build
dotnet run
# Run tests
dotnet test --logger "console;verbosity=detailed"
Architecture
Built with functional programming principles using F# and organized into domain-focused modules (Core, API, UI).