Migrate to bread-utils: Hyprland IPC, single-instance lock, popup scaffold, XDG paths

Mirrors tonight's breadbox migration (same shared crate, same duplicated
patterns):

- position.rs's raw socket1 client -> bread_utils::hypr (file removed
  entirely, its logic now lives in the shared crate)
- toggle_or_continue's TOCTOU-prone PID-file dance -> bread_utils::singleton
- the layer-shell window setup, Up/Down visible-row navigation, and
  click-outside-close gesture -> bread_utils::gtk_popup
- breadclip-core's data_dir(): replaced the buggy
  `dirs::data_local_dir().unwrap_or_else(|| PathBuf::from("~/.local/share"))`
  fallback (flagged but never fixed in tonight's earlier audit pass —
  PathBuf never expands `~`) with bread_utils::xdg::data_dir, which
  resolves a real $HOME before ever falling back.

Builds and tests clean across the whole breadclip workspace.
This commit is contained in:
Breadway 2026-07-17 09:24:38 +08:00
parent 8097d1944c
commit e16c1b461c
6 changed files with 47 additions and 172 deletions

13
Cargo.lock generated
View file

@ -46,11 +46,23 @@ dependencies = [
"serde_json",
]
[[package]]
name = "bread-utils"
version = "0.2.3"
dependencies = [
"dirs",
"gtk4",
"gtk4-layer-shell",
"serde",
"serde_json",
]
[[package]]
name = "breadclip"
version = "0.1.1"
dependencies = [
"bread-theme",
"bread-utils",
"breadclip-core",
"gtk4",
"gtk4-layer-shell",
@ -61,6 +73,7 @@ dependencies = [
name = "breadclip-core"
version = "0.1.0"
dependencies = [
"bread-utils",
"dirs",
"hex",
"rusqlite",