From ec07b82747786a3cacecbec233e60a2e2b53028c Mon Sep 17 00:00:00 2001 From: Breadway Date: Sat, 23 May 2026 12:12:51 +0800 Subject: [PATCH] breadbox: steal focus on open, close on unfocus Switch KeyboardMode to Exclusive so Hyprland hands keyboard focus to breadbox immediately on creation. Add an EventControllerFocus on the window that calls close() the moment focus leaves (click outside, alt-tab, compositor focus change, etc.). Co-Authored-By: Claude Sonnet 4.6 --- src/main.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 52c2a21..e93da63 100644 --- a/src/main.rs +++ b/src/main.rs @@ -331,7 +331,7 @@ fn run_ui(entries: Vec<(String, String)>) { window.init_layer_shell(); window.set_layer(Layer::Overlay); - window.set_keyboard_mode(KeyboardMode::OnDemand); + window.set_keyboard_mode(KeyboardMode::Exclusive); window.set_anchor(Edge::Top, true); window.set_exclusive_zone(-1); @@ -474,6 +474,15 @@ fn run_ui(entries: Vec<(String, String)>) { } }); + // Close when focus leaves the window (click outside, alt-tab, etc.) + let window_foc = window.clone(); + let focus_ctrl = gtk4::EventControllerFocus::new(); + focus_ctrl.connect_leave(move |_| { + cleanup_pid(); + window_foc.close(); + }); + window.add_controller(focus_ctrl); + // Cleanup pid when window is destroyed for any reason window.connect_destroy(|_| cleanup_pid());