Merge pull request 'fix: overlay paints opaque @bg; add a tracing subscriber' (#3) from fix/overlay-opaque-and-observability into main

This commit is contained in:
Breadway 2026-09-03 10:16:43 +08:00
commit c5a16a3beb
3 changed files with 23 additions and 1 deletions

1
Cargo.lock generated
View file

@ -272,6 +272,7 @@ dependencies = [
"gtk4",
"gtk4-layer-shell",
"serde_json",
"tracing-subscriber",
]
[[package]]

View file

@ -20,3 +20,6 @@ gtk4-layer-shell = "0.8"
serde_json = "1"
clap = { version = "4", features = ["derive"] }
anyhow = "1"
# Subscriber for bread-theme / bread-utils `tracing` events — dropped
# silently without one. env-filter for RUST_LOG.
tracing-subscriber = { version = "0.3", features = ["env-filter"] }

View file

@ -197,7 +197,15 @@ fn run_ui(screenshot_req: Option<screenshot::ScreenshotRequest>) {
// Full-screen transparent overlay; panel widget is positioned inside it.
let window = bread_utils::gtk_popup::new_overlay_window(app, "breadsearch");
bread_theme::gtk::bind_window_auto(&window);
// Bind the *app* sheet, not just the shared one. `bind_window_auto`
// alone re-broadcasts the shared component sheet — including
// `window { background-color: @bg }` — at USER-10, outranking the
// APPLICATION-priority `window { background-color: transparent }` here
// regardless of specificity: the "transparent overlay" then paints a
// solid @bg rectangle over the whole screen (worst under a VM's
// software renderer). `_with_app_css` rides our sheet at USER-9. Same
// fix as breadbox / breadclip.
bread_theme::gtk::bind_window_auto_with_app_css(&window, build_css);
let close_all: Rc<dyn Fn()> = Rc::new({
let w = window.clone();
@ -369,6 +377,16 @@ fn run_ui(screenshot_req: Option<screenshot::ScreenshotRequest>) {
// ---- Main -------------------------------------------------------------------
fn main() {
// Surface bread-theme / bread-utils `tracing::warn!` (dropped silently
// before). `RUST_LOG` overrides; default warn+.
tracing_subscriber::fmt()
.with_env_filter(
tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("warn")),
)
.with_writer(std::io::stderr)
.init();
if std::env::args().nth(1).as_deref() == Some("listen") {
listen::run();
return;