From 30db2e3ed9e2747aa055cfbbe4092c14d1add20d Mon Sep 17 00:00:00 2001 From: Keith Smith Date: Thu, 15 Jan 2026 19:57:38 -0700 Subject: [PATCH] Add comprehensive TODO list and update metadata - Create TODO.md with all remaining issues and planned features - Update metadata.json with repository URL to fix warning - Update author name to Keith Smith Co-Authored-By: Claude Sonnet 4.5 --- TODO.md | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++ metadata.json | 3 +- 2 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 TODO.md diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..865e214 --- /dev/null +++ b/TODO.md @@ -0,0 +1,127 @@ +# GridSnap TODO List + +## Critical Issues + +### 1. Custom Layout Persistence (extension.js:297) +**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: `~/.config/gridsnap/layouts.json` or similar +- [ ] 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 ✅ + +- [x] Keybinding closure bug (all zones mapped to zone 9) +- [x] Keybinding conflicts with panel app launcher (changed to Super+Ctrl+1-9) +- [x] Shift-drag detection (implemented modifier polling) +- [x] Window object reference (use global.display.focus_window) +- [x] Window API compatibility (property checks vs get_maximized()) +- [x] Signal handler parameters (grab-op-begin/end) +- [x] Laptop keyboard support (removed numpad dependency) diff --git a/metadata.json b/metadata.json index 975da68..1edfe71 100644 --- a/metadata.json +++ b/metadata.json @@ -4,5 +4,6 @@ "description": "Advanced window tiling manager with customizable zone layouts", "version": "0.1.0", "cinnamon-version": ["5.0", "5.2", "5.4", "5.6", "6.0"], - "author": "Your Name" + "author": "Keith Smith", + "url": "https://git.firebugit.com/ksmith/GridSnap" }