Maintenance release addressing file modification tracking issues and improving application stability.
This release is a culmination of multiple commits related to performance, stability and overall app experience after getting feedback.
Fixed
- Critical: File modification indicator (asterisk) now correctly reflects document state after save operations
- Critical: Spurious textChanged signals during file load no longer trigger false modification state
- Critical: Document modification state properly synchronized between Qt's internal tracking and application UI
- File save operations no longer cause immediate re-marking of files as modified
- New file creation no longer incorrectly marks files as modified before any edits
- Editor tab titles now accurately reflect saved/unsaved state without manual intervention
Added
Documentation:
- TROUBLESHOOTING.md with Wine compatibility guidance and common issue resolution
- Wine/Linux limitations documented with source installation instructions
- README.md updated with platform compatibility warnings
Changed
- Problems table now read-only to prevent accidental edits while preserving copy functionality
- All program types now execute in external terminal windows for consistent I/O behavior
- File modification tracking migrated to Qt's QTextDocument.isModified() for reliable state management
- Signal-based architecture for modification state changes using custom pyqtSignal
Performance Improvements
- Trie-based syntax highlighting for O(n) keyword matching instead of O(n*m) regex operations
- LRU cache on toolchain detection for faster repeated lookups
- Debounced syntax highlighting with 200ms delay to reduce CPU usage during rapid typing
- Precompiled regex patterns for string and comment matching
- Optimized highlightBlock() implementation reducing editor lag on large files
Technical Improvements
- Implemented proper signal blocking during file load operations to prevent false positives
- Added _loading flag to distinguish between programmatic and user-initiated text changes
- Modified save_file() to explicitly set document modification state via setModified(False)
- Refactored _on_text_changed() to check document.isModified() as source of truth
- Disconnection and reconnection of textChanged signal during file loading for clean state initialization
- FastSyntaxHighlighter class with TrieNode data structure for efficient keyword lookup
Known Issues
- Windows-only distribution (Wine compatibility not supported for PyInstaller builds)
- Large size of the app folder