From ba8273b2ca06ccb5c85f84d6d232c8b618154373 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.). --- 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());