Fix input events going to hidden components

jmap-eventsource
Manos Pitsidianakis 2020-10-09 17:15:00 +03:00
parent bc74379b27
commit e42c9281fd
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
2 changed files with 21 additions and 7 deletions

View File

@ -1160,6 +1160,7 @@ impl Component for StatusBar {
context
.replies
.push_back(UIEvent::ChangeMode(UIMode::Normal));
self.dirty = true;
return true;
}
UIEvent::Resize => {
@ -1792,6 +1793,9 @@ impl Component for Tabbed {
_ => {}
}
let c = self.cursor_pos;
if let UIEvent::Input(_) | UIEvent::CmdInput(_) | UIEvent::EmbedInput(_) = event {
self.children[c].process_event(event, context)
} else {
self.children[c].process_event(event, context)
|| self.children.iter_mut().enumerate().any(|(idx, child)| {
if idx == c {
@ -1800,6 +1804,7 @@ impl Component for Tabbed {
child.process_event(event, context)
})
}
}
fn is_dirty(&self) -> bool {
self.dirty || self.children[self.cursor_pos].is_dirty()
}
@ -1918,6 +1923,7 @@ impl<T: 'static + PartialEq + Debug + Clone + Sync + Send> Component for UIDialo
self.done = true;
if let Some(event) = self.done() {
context.replies.push_back(event);
context.replies.push_back(UIEvent::ComponentKill(self.id));
}
return true;
}
@ -1953,6 +1959,7 @@ impl<T: 'static + PartialEq + Debug + Clone + Sync + Send> Component for UIDialo
self.done = true;
if let Some(event) = self.done() {
context.replies.push_back(event);
context.replies.push_back(UIEvent::ComponentKill(self.id));
}
return true;
}
@ -1963,6 +1970,7 @@ impl<T: 'static + PartialEq + Debug + Clone + Sync + Send> Component for UIDialo
self.done = true;
if let Some(event) = self.done() {
context.replies.push_back(event);
context.replies.push_back(UIEvent::ComponentKill(self.id));
}
return true;
}
@ -1973,6 +1981,7 @@ impl<T: 'static + PartialEq + Debug + Clone + Sync + Send> Component for UIDialo
self.done = true;
if let Some(event) = self.done() {
context.replies.push_back(event);
context.replies.push_back(UIEvent::ComponentKill(self.id));
}
return true;
}
@ -2206,6 +2215,7 @@ impl Component for UIConfirmationDialog {
self.done = true;
if let Some(event) = self.done() {
context.replies.push_back(event);
context.replies.push_back(UIEvent::ComponentKill(self.id));
}
return true;
}
@ -2241,6 +2251,7 @@ impl Component for UIConfirmationDialog {
self.done = true;
if let Some(event) = self.done() {
context.replies.push_back(event);
context.replies.push_back(UIEvent::ComponentKill(self.id));
}
return true;
}
@ -2251,6 +2262,7 @@ impl Component for UIConfirmationDialog {
self.done = true;
if let Some(event) = self.done() {
context.replies.push_back(event);
context.replies.push_back(UIEvent::ComponentKill(self.id));
}
return true;
}
@ -2261,6 +2273,7 @@ impl Component for UIConfirmationDialog {
self.done = true;
if let Some(event) = self.done() {
context.replies.push_back(event);
context.replies.push_back(UIEvent::ComponentKill(self.id));
}
return true;
}

View File

@ -560,6 +560,7 @@ impl Component for FormWidget {
}
UIEvent::ChangeMode(UIMode::Normal) if self.focus == FormFocus::TextInput => {
self.focus = FormFocus::Fields;
return false;
}
UIEvent::InsertInput(Key::Backspace) if self.focus == FormFocus::TextInput => {
let field = self.fields.get_mut(&self.layout[self.cursor]).unwrap();