Features: - Custom layouts now saved to ~/.local/share/gridsnap/layouts.json - Layouts automatically loaded on extension initialization - Layouts persist across Cinnamon restarts and extension reloads - Only custom layouts saved to file (default layouts remain in code) - Added GLib and Gio imports for file operations - Error handling for file read/write operations Technical implementation: - _loadLayouts(): Merges default layouts with saved custom layouts on startup - _saveLayouts(): Extracts and saves only custom-* layouts to JSON file - Automatically creates storage directory if it doesn't exist - Called when user saves a layout in the graphical editor Fixes TODO item #1 - Custom Layout Persistence Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
4.4 KiB
4.4 KiB
GridSnap TODO List
Critical Issues
1. Custom Layout Persistence ✅ COMPLETED
Priority: High
- Custom layouts are only stored in memory
- Layouts are lost when extension reloads or Cinnamon restarts
- Need to implement file-based storage
- Location:
~/.local/share/gridsnap/layouts.json - Save layouts when created in graphical editor
- Load layouts on extension initialization
2. Remove Last Zone Implementation (extension.js:236-274)
Priority: Medium
_removeLastZone()destroys and recreates entire editor interface- Causes visual flicker
- Inefficient approach
- Could leave dangling event listeners
- Refactor to only remove the last zone widget without recreating everything
Functionality Improvements
3. Multi-Monitor Support
Priority: High
- Currently only works on primary monitor (extension.js:61)
- Need per-monitor zone configurations
- Detect which monitor window is on when snapping
- Allow zone editor to work on any monitor
- Store zone layouts per monitor
4. High-DPI Display Support
Priority: Medium
- Coordinates from
get_coords()may not respect window scaling - Test on high-DPI displays
- Verify zone calculations work correctly with display scaling
- May need to use
get_resource_scale()or similar
5. Edit Existing Custom Layouts
Priority: Medium
- Currently can only create new layouts in editor
- Add ability to select and edit existing custom layouts
- Add UI to choose which layout to edit
- Pre-populate editor with existing zones when editing
Code Quality & Robustness
6. Comprehensive Error Handling
Priority: Medium
- Add validation of zone sizes during window snapping
- Add checks for
window.move_resize_frame()success - Validate monitor dimensions before calculations
- Handle edge cases (window too small, zone too small, etc.)
- Add user notifications for errors instead of silent failures
7. Event Leak Prevention
Priority: Low
- Zone preview widgets might not be properly destroyed if motion events stop unexpectedly
- Audit all signal connections and ensure disconnect in cleanup
- Add defensive cleanup in edge cases
- Review overlay widget lifecycle
8. Zone Overlap Detection
Priority: Low
- Warn user if zones overlap in graphical editor
- Provide visual feedback for overlapping zones
- Optionally prevent overlaps or auto-adjust
Features from README (Planned)
9. Zone Layout Import/Export
Priority: Low
- Allow exporting custom layouts to JSON files
- Import layouts from JSON files
- Share layouts between systems
- Backup/restore functionality
10. More Pre-configured Layouts
Priority: Low
- Add more default layout options
- Common patterns: ultrawide monitor layouts, vertical splits
- 1/3 - 2/3 layouts
- Picture-in-picture style layouts
11. Animation Effects
Priority: Low
- Add smooth transitions when snapping windows
- Animate zone overlay appearance/disappearance
- Visual feedback when window snaps to zone
12. Settings Panel
Priority: Medium
- Add Cinnamon settings panel for the extension
- Allow customization of keybindings
- Configure animation speeds
- Toggle features on/off
- Manage saved layouts (delete, rename, reorder)
Documentation
13. Update Metadata
Priority: Low
- Add "url" property to metadata.json (currently shows warning)
- Update author name from "Your Name" to "Keith Smith"
- Add project URL/repository link
Testing
14. Test Coverage
Priority: Low
- Test on different Cinnamon versions (5.0, 5.2, 5.4, 5.6, 6.0)
- Test with different window types (maximized, minimized, dialog boxes)
- Test edge cases (dragging between monitors, rapid key presses)
- Test with different keyboard layouts
- Verify memory leaks don't occur with repeated enable/disable
Recently Fixed ✅
- Keybinding closure bug (all zones mapped to zone 9)
- Keybinding conflicts with panel app launcher (changed to Super+Ctrl+1-9)
- Shift-drag detection (implemented modifier polling)
- Window object reference (use global.display.focus_window)
- Window API compatibility (property checks vs get_maximized())
- Signal handler parameters (grab-op-begin/end)
- Laptop keyboard support (removed numpad dependency)