No description
  • F# 98.6%
  • PowerShell 1.4%
Find a file
gabe wsl main pc f74196ced3 Complete Windows system tray implementation with preset integration and UI fixes
## 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.
2025-09-22 22:12:03 -04:00
API Complete Phase 4: Preset Management - Async patterns & data organization 2025-09-20 11:05:10 -04:00
Assets Complete Windows system tray implementation with preset integration and UI fixes 2025-09-22 22:12:03 -04:00
Core Complete Phase 3: Core Domain type safety & Display Canvas functional excellence 2025-09-20 10:43:33 -04:00
references Fix display enable/disable and primary toggle functionality 2025-09-14 22:37:49 -04:00
UI Complete Windows system tray implementation with preset integration and UI fixes 2025-09-22 22:12:03 -04:00
.gitignore adding updated gitignore 2025-09-13 18:21:27 -04:00
app.manifest feat: Add status bar with theme toggle and basic display detection 2025-07-27 14:08:32 -04:00
application-state-domain-analysis.md 🎉 COMPLETE: Phase 5 & Full Functional Programming Transformation 2025-09-20 11:34:24 -04:00
ApplicationConfiguration.fs Complete Windows system tray implementation with preset integration and UI fixes 2025-09-22 22:12:03 -04:00
ApplicationLifecycle.fs 🎉 COMPLETE: Phase 5 & Full Functional Programming Transformation 2025-09-20 11:34:24 -04:00
ApplicationState.fs Complete Windows system tray implementation with preset integration and UI fixes 2025-09-22 22:12:03 -04:00
ApplicationStateManager.fs 🎉 COMPLETE: Phase 5 & Full Functional Programming Transformation 2025-09-20 11:34:24 -04:00
ApplicationStateSimplified.fs 🎉 COMPLETE: Phase 5 & Full Functional Programming Transformation 2025-09-20 11:34:24 -04:00
appsettings.json feat: Add status bar with theme toggle and basic display detection 2025-07-27 14:08:32 -04:00
AppState.fs Fix Display4 target mapping and implement comprehensive logging system 2025-09-15 20:29:27 -04:00
CLAUDE.md Implement display position changes using CCD API 2025-08-30 22:38:59 -04:00
core-domain-analysis.md Complete Phase 3: Core Domain type safety & Display Canvas functional excellence 2025-09-20 10:43:33 -04:00
display-canvas-domain-analysis.md Complete Phase 3: Core Domain type safety & Display Canvas functional excellence 2025-09-20 10:43:33 -04:00
DisplaySwitch-Pro.fsproj Complete Windows system tray implementation with preset integration and UI fixes 2025-09-22 22:12:03 -04:00
DomainCoordination.fs 🎉 COMPLETE: Phase 5 & Full Functional Programming Transformation 2025-09-20 11:34:24 -04:00
master-domain-analysis.md 🎉 COMPLETE: Phase 5 & Full Functional Programming Transformation 2025-09-20 11:34:24 -04:00
preset-key-bindings-implementation.md Complete Windows system tray implementation with preset integration and UI fixes 2025-09-22 22:12:03 -04:00
preset-management-domain-analysis.md Complete Phase 4: Preset Management - Async patterns & data organization 2025-09-20 11:05:10 -04:00
Program.fs Fix Phase 5 list truncation error - use List.truncate instead of List.take 2025-09-20 11:45:56 -04:00
README.md Implement display position changes using CCD API 2025-08-30 22:38:59 -04:00
system-tray-implementation.md Complete Windows system tray implementation with preset integration and UI fixes 2025-09-22 22:12:03 -04:00
ui-orchestration-domain-analysis.md Complete Phase 2: UI Orchestration with event-driven architecture 2025-09-17 21:44:22 -04:00
windows-api-domain-analysis.md Add user testing verification to Phase 1 completion documentation 2025-09-17 18:39:53 -04:00

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).