mirror of
https://github.com/FliegendeWurst/cursive.git
synced 2024-11-24 01:46:31 +00:00
Fix dialog focus
This commit is contained in:
parent
6543287704
commit
f06bc2e1cd
@ -230,6 +230,7 @@ impl Dialog {
|
|||||||
pub fn clear_buttons(&mut self) {
|
pub fn clear_buttons(&mut self) {
|
||||||
self.buttons.clear();
|
self.buttons.clear();
|
||||||
self.invalidate();
|
self.invalidate();
|
||||||
|
// Fix focus?
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Removes a button from this dialog.
|
/// Removes a button from this dialog.
|
||||||
@ -240,6 +241,7 @@ impl Dialog {
|
|||||||
pub fn remove_button(&mut self, i: usize) {
|
pub fn remove_button(&mut self, i: usize) {
|
||||||
self.buttons.remove(i);
|
self.buttons.remove(i);
|
||||||
self.invalidate();
|
self.invalidate();
|
||||||
|
// Fix focus?
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets the horizontal alignment for the buttons, if any.
|
/// Sets the horizontal alignment for the buttons, if any.
|
||||||
@ -439,9 +441,9 @@ impl Dialog {
|
|||||||
DialogFocus::Content
|
DialogFocus::Content
|
||||||
}
|
}
|
||||||
DialogFocus::Button(c) => {
|
DialogFocus::Button(c) => {
|
||||||
DialogFocus::Button(min(c, self.buttons.len()))
|
DialogFocus::Button(min(c, self.buttons.len() - 1))
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Private methods
|
// Private methods
|
||||||
@ -778,8 +780,26 @@ impl View for Dialog {
|
|||||||
// TODO: This may depend on button position relative to the content?
|
// TODO: This may depend on button position relative to the content?
|
||||||
//
|
//
|
||||||
match source {
|
match source {
|
||||||
Direction::Abs(Absolute::None)
|
Direction::Abs(Absolute::None) => {
|
||||||
| Direction::Rel(Relative::Front)
|
// Only reject focus if no buttons and no focus-taking content.
|
||||||
|
// Also fix focus if we're focusing the wrong thing.
|
||||||
|
match (
|
||||||
|
self.focus,
|
||||||
|
self.content.take_focus(source),
|
||||||
|
!self.buttons.is_empty(),
|
||||||
|
) {
|
||||||
|
(DialogFocus::Content, false, true) => {
|
||||||
|
self.focus = DialogFocus::Button(0);
|
||||||
|
true
|
||||||
|
}
|
||||||
|
(DialogFocus::Button(_), true, false) => {
|
||||||
|
self.focus = DialogFocus::Content;
|
||||||
|
true
|
||||||
|
}
|
||||||
|
(_, content, buttons) => content || buttons,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Direction::Rel(Relative::Front)
|
||||||
| Direction::Abs(Absolute::Left)
|
| Direction::Abs(Absolute::Left)
|
||||||
| Direction::Abs(Absolute::Up) => {
|
| Direction::Abs(Absolute::Up) => {
|
||||||
// Forward focus: content, then buttons
|
// Forward focus: content, then buttons
|
||||||
|
Loading…
Reference in New Issue
Block a user