clean up and document focus system
This commit is contained in:
1 parent
749150e22d
commit
dd7784d205
2 files changed
+12
-26
No files matched your search
+10
-26
@@ -120,11 +120,10 @@ impl FocusState {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// the id that started focused to track when a loop has happened
|
||||
let mut loop_marker_id = self.last_focused_id;
|
||||
let focus_level = &mut self.focus_level;
|
||||
let mut next_focus = None;
|
||||
let starting_focus_level = *focus_level;
|
||||
let mut focus_level_changed = false;
|
||||
|
||||
loop {
|
||||
let new = if forward {
|
||||
@@ -175,9 +174,6 @@ impl FocusState {
|
||||
|
||||
if let Some(level) = closest_level {
|
||||
*focus_level = level;
|
||||
if *focus_level != starting_focus_level {
|
||||
focus_level_changed = true;
|
||||
}
|
||||
} else {
|
||||
if forward {
|
||||
*focus_level = FocusLevel::Unfocusable;
|
||||
@@ -185,11 +181,6 @@ impl FocusState {
|
||||
*focus_level = FocusLevel::Focusable;
|
||||
}
|
||||
}
|
||||
|
||||
// if the focus level looped, we are done
|
||||
if *focus_level == starting_focus_level && focus_level_changed {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// once we have looked at all the elements exit the loop
|
||||
@@ -209,28 +200,21 @@ impl FocusState {
|
||||
};
|
||||
if after_previous_focused && current_level.focusable() {
|
||||
if current_level == *focus_level {
|
||||
next_focus = Some((new_id, current_level));
|
||||
next_focus = Some(new_id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if let Some((id, order)) = next_focus {
|
||||
if order.focusable() {
|
||||
rdom[id].state.focused = true;
|
||||
if let Some(old) = self.last_focused_id.replace(id) {
|
||||
rdom[old].state.focused = false;
|
||||
}
|
||||
// reset the position to the currently focused element
|
||||
while if forward {
|
||||
self.focus_iter.next(&rdom).id()
|
||||
} else {
|
||||
self.focus_iter.prev(&rdom).id()
|
||||
} != id
|
||||
{}
|
||||
self.dirty = true;
|
||||
return true;
|
||||
if let Some(id) = next_focus {
|
||||
rdom[id].state.focused = true;
|
||||
if let Some(old) = self.last_focused_id.replace(id) {
|
||||
rdom[old].state.focused = false;
|
||||
}
|
||||
// reset the position to the currently focused element
|
||||
while self.focus_iter.next(&rdom).id() != id {}
|
||||
self.dirty = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
false
|
||||
|
||||
Reference in new issue
Block a user