# Window Management & System Tray Guide Your rmtPocketWatcher application now includes comprehensive window management and system tray functionality for a professional desktop experience. ## 🪟 Window Controls ### Title Bar Features - **Draggable Area**: Click and drag anywhere on the title bar to move the window - **Double-click**: Double-click the title bar to maximize/restore the window - **Custom Controls**: Professional-looking minimize, maximize, and close buttons ### Window Control Buttons | Button | Icon | Function | Tooltip | |--------|------|----------|---------| | **Minimize** | `−` | Minimizes to system tray | "Minimize to system tray" | | **Maximize** | `⛶`/`⧉` | Toggle maximize/restore | "Maximize window" / "Restore window" | | **Close** | `×` | Closes to system tray | "Close to system tray" | ### Key Behaviors - **Close button** minimizes to tray instead of exiting the application - **Minimize button** sends the window directly to the system tray - **Window dragging** works from anywhere on the title bar - **Maximize toggle** remembers window state ## 🔔 System Tray Integration ### Tray Icon Features - **Dynamic Tooltip**: Shows current connection status - **Single Click**: Toggle window visibility (show/hide) - **Right Click**: Opens context menu with options - **Visual Indicator**: Icon represents the application state ### System Tray Menu | Menu Item | Function | |-----------|----------| | **Show rmtPocketWatcher** | Restores window from tray | | **Check for Updates** | Shows window and triggers update check | | **🔄 Update Available!** | Appears when updates are detected | | **About** | Shows application information dialog | | **Exit** | Completely closes the application | ### Dynamic Status Updates - **Tooltip Updates**: Reflects connection status ("Connected", "Disconnecting", etc.) - **Menu Updates**: Shows update availability in real-time - **Status Integration**: Syncs with price provider and update provider ## 🎛️ User Experience ### Window Lifecycle 1. **Startup**: Window appears normally 2. **Minimize**: Window hides to system tray 3. **Tray Click**: Window restores and focuses 4. **Close**: Window hides to tray (doesn't exit) 5. **Exit**: Only via tray menu "Exit" option ### Professional Features - **No Taskbar Clutter**: Minimized windows don't show in taskbar - **Background Operation**: App continues running when minimized - **Quick Access**: Single click to restore from tray - **Status Awareness**: Tray shows current application state ## 🔧 Technical Implementation ### Core Components #### WindowService (`lib/services/window_service.dart`) - Manages all window operations - Handles system tray integration - Provides event listeners for window and tray events - Integrates with application providers #### Key Methods ```dart WindowService().minimizeToTray() // Hide to system tray WindowService().showWindow() // Restore from tray WindowService().maximizeWindow() // Toggle maximize state WindowService().closeWindow() // Close to tray WindowService().exitApp() // Complete application exit ``` #### Provider Integration - **PriceProvider**: Updates tray tooltip with connection status - **UpdateProvider**: Updates tray menu with update availability - **Real-time Sync**: Tray reflects current application state ### Event Handling #### Window Events - `onWindowClose()`: Intercepts close and minimizes to tray - `onWindowMinimize()`: Handles minimize operations - `onWindowRestore()`: Manages window restoration - `onWindowMaximize()`/`onWindowUnmaximize()`: Toggle states #### Tray Events - `onTrayIconMouseDown()`: Single click to toggle visibility - `onTrayIconRightMouseDown()`: Right click for context menu - `onTrayMenuItemClick()`: Handle menu item selections ## 🎨 Visual Design ### Title Bar Styling - **Background**: Dark theme (`#1A1F3A`) - **Text**: White application name and organization - **Buttons**: Consistent with application theme - **Height**: 40px for comfortable interaction ### System Tray - **Icon**: Application logo (falls back to analytics icon) - **Tooltip**: Dynamic status information - **Menu**: Consistent with application theme ## 🚀 Usage Examples ### For End Users #### Basic Window Management ``` • Drag title bar to move window • Double-click title bar to maximize • Click minimize (−) to hide to tray • Click close (×) to hide to tray • Right-click tray icon for menu • Click "Exit" in tray menu to quit ``` #### System Tray Operations ``` • Single-click tray icon: Show/hide window • Right-click tray icon: Open context menu • Menu → "Show rmtPocketWatcher": Restore window • Menu → "Check for Updates": Check for new versions • Menu → "About": View application information • Menu → "Exit": Completely close application ``` ### For Developers #### Integrating with Providers ```dart // Update tray status based on connection WindowService().updateTrayTooltip('Connected to servers'); // Update menu with update availability WindowService().updateTrayMenu(hasUpdate: true); // Show about dialog from tray WindowService()._showAboutDialog(); ``` ## 🔒 Security & Privacy ### Safe Operations - **No Data Collection**: Window management doesn't collect user data - **Local Storage**: All preferences stored locally - **Secure Minimize**: Sensitive data hidden when minimized - **Clean Exit**: Proper cleanup on application exit ### User Control - **Explicit Actions**: All operations require user interaction - **Clear Feedback**: Visual and tooltip feedback for all actions - **Reversible**: All window states can be restored - **Transparent**: Clear indication of application status ## 🛠️ Troubleshooting ### Common Issues #### System Tray Icon Not Appearing - **Cause**: System tray initialization failed - **Solution**: Check Windows notification area settings - **Workaround**: Use window controls instead of tray #### Window Won't Restore - **Cause**: Window service not initialized - **Solution**: Restart application - **Debug**: Check console for initialization errors #### Tray Menu Not Working - **Cause**: Context menu creation failed - **Solution**: Update tray manager package - **Workaround**: Use window controls ### Debug Information ```dart // Check window service status print('Window service initialized: ${WindowService().isInitialized}'); print('Minimized to tray: ${WindowService().isMinimizedToTray}'); ``` ## 📈 Future Enhancements ### Planned Features - **Tray Notifications**: Show price alerts in tray - **Quick Actions**: Direct price check from tray menu - **Status Icons**: Different icons for different connection states - **Keyboard Shortcuts**: Global hotkeys for window operations ### Customization Options - **Tray Behavior**: Option to minimize to taskbar instead - **Close Behavior**: Option to exit instead of minimize - **Startup Options**: Start minimized to tray - **Theme Integration**: Tray menu theme matching ## 📋 Summary Your rmtPocketWatcher application now provides: ✅ **Professional Window Management** - Draggable title bar with custom controls - Proper minimize, maximize, and close operations - Seamless window state management ✅ **Complete System Tray Integration** - Hide to tray instead of taskbar clutter - Dynamic status updates in tooltip - Full-featured context menu ✅ **User-Friendly Experience** - Intuitive window operations - Clear visual feedback - Professional desktop application behavior ✅ **Developer-Friendly Architecture** - Clean service-based implementation - Provider integration for real-time updates - Extensible for future enhancements The application now behaves like a professional desktop application with proper window management and system tray integration, providing users with a seamless and intuitive experience for monitoring AUEC prices.