Sprint 5: Power Buttons and Session Selector
Goal: Add power control buttons (shutdown, reboot, suspend) and a session selector dropdown to the greeter UI.
Completed Features
Power Buttons
- Custom Cairo-drawn icons (no external dependencies):
- Power symbol (circle with vertical line gap at top)
- Reboot (circular arrows)
- Suspend (crescent moon)
- Bottom-right corner positioning
- Hover effects with color-coded highlights:
- Shutdown: Red tint
- Reboot: Blue tint
- Suspend: Gold tint
- Semi-transparent backgrounds that glow on hover
- IPC integration for power actions
Session Selector
- Dropdown positioned below login form
- Lists sessions from daemon via
ListSessionsIPC - Dropdown opens upward above the button
- Hover highlighting on items
- Checkmark indicator on selected session
- Selected session's exec command used for login
Supporting Changes
- Added
POINTER_MOTIONto X11 event mask for hover tracking - Mouse position tracking in main loop
- Click handling for interactive elements
Files Added/Modified
gardm-greeter/src/icons.rs- Custom icon drawing functionsgardm-greeter/src/widgets/power_buttons.rs- Power button widgetgardm-greeter/src/widgets/session_selector.rs- Session dropdown widgetgardm-greeter/src/main.rs- Event handling integrationgardm-greeter/src/window.rs- Mouse motion events
View source
| 1 | # Sprint 5: Power Buttons and Session Selector |
| 2 | |
| 3 | **Goal:** Add power control buttons (shutdown, reboot, suspend) and a session selector dropdown to the greeter UI. |
| 4 | |
| 5 | ## Completed Features |
| 6 | |
| 7 | ### Power Buttons |
| 8 | - Custom Cairo-drawn icons (no external dependencies): |
| 9 | - Power symbol (circle with vertical line gap at top) |
| 10 | - Reboot (circular arrows) |
| 11 | - Suspend (crescent moon) |
| 12 | - Bottom-right corner positioning |
| 13 | - Hover effects with color-coded highlights: |
| 14 | - Shutdown: Red tint |
| 15 | - Reboot: Blue tint |
| 16 | - Suspend: Gold tint |
| 17 | - Semi-transparent backgrounds that glow on hover |
| 18 | - IPC integration for power actions |
| 19 | |
| 20 | ### Session Selector |
| 21 | - Dropdown positioned below login form |
| 22 | - Lists sessions from daemon via `ListSessions` IPC |
| 23 | - Dropdown opens upward above the button |
| 24 | - Hover highlighting on items |
| 25 | - Checkmark indicator on selected session |
| 26 | - Selected session's exec command used for login |
| 27 | |
| 28 | ### Supporting Changes |
| 29 | - Added `POINTER_MOTION` to X11 event mask for hover tracking |
| 30 | - Mouse position tracking in main loop |
| 31 | - Click handling for interactive elements |
| 32 | |
| 33 | ## Files Added/Modified |
| 34 | - `gardm-greeter/src/icons.rs` - Custom icon drawing functions |
| 35 | - `gardm-greeter/src/widgets/power_buttons.rs` - Power button widget |
| 36 | - `gardm-greeter/src/widgets/session_selector.rs` - Session dropdown widget |
| 37 | - `gardm-greeter/src/main.rs` - Event handling integration |
| 38 | - `gardm-greeter/src/window.rs` - Mouse motion events |