diff options
| author | srdusr <[email protected]> | 2025-08-15 23:22:00 +0200 |
|---|---|---|
| committer | srdusr <[email protected]> | 2025-08-15 23:22:00 +0200 |
| commit | cc22fe69a68e0fff027d833029aea850976488c8 (patch) | |
| tree | eb1350c24c61b5d4b30d763d64149a5c6504a925 /crates/wayland/src/udev/platform.rs | |
| parent | 6694a2d9946d98d5752d84b22c45879cab5c9abe (diff) | |
| download | srdwm-cc22fe69a68e0fff027d833029aea850976488c8.tar.gz srdwm-cc22fe69a68e0fff027d833029aea850976488c8.zip | |
Add real desktop icons plus right-click desktop/icon context menus
Closes "right-click on bare desktop" - previously a true no-op, nothing
rendered above the wallpaper at all. Requested directly: a real desktop
"just like windows does" - Home/Computer/Trash plus one icon per real
~/Desktop entry, individually draggable with persisted grid positions,
double-click to open, right-click menus (per-icon "Open" plus "Set as
Wallpaper" for image files when general.wallpaper_command is set; bare
desktop "New Folder"/"Refresh").
Architecture mirrors the existing context_menu.rs/snap_flyout.rs
"compositor-owned floating UI" pattern: desktop_icons.rs (data model, grid
layout, filesystem scan, hit-test), desktop_icons_state.rs (JSON
persistence, same shape as monitor_layout.rs), desktop_menu.rs (the new
right-click menu, reusing decoration::render_context_menu's existing
rasterizer), state/desktop_icons.rs (CompState glue: rescan/select/drag/
open/persist), and a new decoration::render_desktop_icon rasterizer --
hand-drawn glyphs, since no PNG/SVG decoding capability exists anywhere in
this workspace. Wired into both render loops (udev and winit) above the
wallpaper and below every window, and into input/pointer.rs's button/
motion handlers for selection, drag, double-click, and both menus.
Four new config keys: general.desktop_icons (default true - a directly
requested, purely visual feature, unlike the opt-in-while-experimental
general.gpu), general.file_manager, general.desktop_icon_single_click,
general.wallpaper_command (all default off/empty).
Deliberately out of scope for this pass, stated up front: move-to-trash
and "Empty Trash" (destructive, no confirmation-dialog primitive to gate
them on yet), filesystem watching, multi-select, per-mimetype icon art,
icons on any monitor but the primary one.
124 wayland-crate tests (up from 106), full workspace build and clippy
clean.
Diffstat (limited to 'crates/wayland/src/udev/platform.rs')
| -rw-r--r-- | crates/wayland/src/udev/platform.rs | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/crates/wayland/src/udev/platform.rs b/crates/wayland/src/udev/platform.rs index a4a72a0..2633f16 100644 --- a/crates/wayland/src/udev/platform.rs +++ b/crates/wayland/src/udev/platform.rs @@ -230,6 +230,12 @@ impl UdevPlatform { context_menu_buffer: None, snap_flyout: None, snap_flyout_buffer: None, + desktop_icons: None, + desktop_icon_buffers: HashMap::new(), + desktop_icon_drag: None, + desktop_menu: None, + desktop_menu_buffer: None, + last_icon_click: None, wm: wm.clone(), surface_to_id: HashMap::new(), id_to_window: HashMap::new(), |