improv(segmented_button): hide focus state until tabbed
This commit is contained in:
parent
5434dc95d5
commit
95ebabf149
1 changed files with 7 additions and 1 deletions
|
|
@ -600,6 +600,7 @@ where
|
||||||
collapsed: Default::default(),
|
collapsed: Default::default(),
|
||||||
focused: Default::default(),
|
focused: Default::default(),
|
||||||
focused_item: Default::default(),
|
focused_item: Default::default(),
|
||||||
|
focused_visible: false,
|
||||||
hovered: Default::default(),
|
hovered: Default::default(),
|
||||||
known_length: Default::default(),
|
known_length: Default::default(),
|
||||||
middle_clicked: Default::default(),
|
middle_clicked: Default::default(),
|
||||||
|
|
@ -1053,6 +1054,7 @@ where
|
||||||
..
|
..
|
||||||
}) = event
|
}) = event
|
||||||
{
|
{
|
||||||
|
state.focused_visible = true;
|
||||||
return if modifiers.shift() {
|
return if modifiers.shift() {
|
||||||
self.focus_previous(state)
|
self.focus_previous(state)
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1333,7 +1335,7 @@ where
|
||||||
};
|
};
|
||||||
|
|
||||||
let key_is_active = self.model.is_active(key);
|
let key_is_active = self.model.is_active(key);
|
||||||
let key_is_focused = self.button_is_focused(state, key);
|
let key_is_focused = state.focused_visible && self.button_is_focused(state, key);
|
||||||
let key_is_hovered = self.button_is_hovered(state, key);
|
let key_is_hovered = self.button_is_hovered(state, key);
|
||||||
let status_appearance = if self.button_is_pressed(state, key) && key_is_hovered {
|
let status_appearance = if self.button_is_pressed(state, key) && key_is_hovered {
|
||||||
appearance.pressed
|
appearance.pressed
|
||||||
|
|
@ -1672,6 +1674,8 @@ pub struct LocalState {
|
||||||
pub(super) buttons_offset: usize,
|
pub(super) buttons_offset: usize,
|
||||||
/// Whether buttons need to be collapsed to preserve minimum width
|
/// Whether buttons need to be collapsed to preserve minimum width
|
||||||
pub(super) collapsed: bool,
|
pub(super) collapsed: bool,
|
||||||
|
/// Visibility of focus state
|
||||||
|
focused_visible: bool,
|
||||||
/// If the widget is focused or not.
|
/// If the widget is focused or not.
|
||||||
focused: Option<Focus>,
|
focused: Option<Focus>,
|
||||||
/// The key inside the widget that is currently focused.
|
/// The key inside the widget that is currently focused.
|
||||||
|
|
@ -1733,12 +1737,14 @@ impl operation::Focusable for LocalState {
|
||||||
|
|
||||||
fn focus(&mut self) {
|
fn focus(&mut self) {
|
||||||
self.set_focused();
|
self.set_focused();
|
||||||
|
self.focused_visible = true;
|
||||||
self.focused_item = Item::Set;
|
self.focused_item = Item::Set;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn unfocus(&mut self) {
|
fn unfocus(&mut self) {
|
||||||
self.focused = None;
|
self.focused = None;
|
||||||
self.focused_item = Item::None;
|
self.focused_item = Item::None;
|
||||||
|
self.focused_visible = false;
|
||||||
self.show_context = None;
|
self.show_context = None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue