From f835afa59c3890ee0e16933bbf7d03263447c285 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Wed, 11 Jun 2025 09:24:02 +0200 Subject: [PATCH] fix(segmented_button): unfocus when clicking out of bounds --- src/widget/segmented_button/widget.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/widget/segmented_button/widget.rs b/src/widget/segmented_button/widget.rs index 313b686d..a94763d6 100644 --- a/src/widget/segmented_button/widget.rs +++ b/src/widget/segmented_button/widget.rs @@ -935,6 +935,7 @@ where } if can_activate { + eprintln!("can activate focus"); shell.publish(on_activate(key)); state.focused = true; state.focused_item = Item::Tab(key); @@ -1036,6 +1037,16 @@ where } } } + } else if state.focused { + // Unfocus on clicks outside of the boundaries of the segmented button. + if let Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) + | Event::Touch(touch::Event::FingerPressed { .. }) = event + { + state.focused = true; + state.focused_item = Item::None; + state.pressed_item = None; + return event::Status::Ignored; + } } if state.focused { @@ -1724,11 +1735,13 @@ impl operation::Focusable for LocalState { } fn focus(&mut self) { + eprintln!("focus"); self.focused = true; self.focused_item = Item::Set; } fn unfocus(&mut self) { + eprintln!("unfocus"); self.focused = false; self.focused_item = Item::None; self.show_context = None;