summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManos Pitsidianakis <el13635@mail.ntua.gr>2020-10-09 17:15:00 +0300
committerManos Pitsidianakis <el13635@mail.ntua.gr>2020-10-11 16:53:04 +0300
commite42c9281fdb77d6cd27d4a261ed59078df1cbf63 (patch)
tree216444f6e0df93d5a76e3e21a721ccf15c5b736e
parentbc74379b277ab885f5a5a95a7ec7d1d403e95201 (diff)
Fix input events going to hidden components
-rw-r--r--src/components/utilities.rs27
-rw-r--r--src/components/utilities/widgets.rs1
2 files changed, 21 insertions, 7 deletions
diff --git a/src/components/utilities.rs b/src/components/utilities.rs
index 6c911415..f3636c28 100644
--- a/src/components/utilities.rs
+++ b/src/components/utilities.rs
@@ -1160,6 +1160,7 @@ impl Component for StatusBar {
context
.replies
.push_back(UIEvent::ChangeMode(UIMode::Normal));
+ self.dirty = true;
return true;
}
UIEvent::Resize => {
@@ -1792,13 +1793,17 @@ impl Component for Tabbed {
_ => {}
}
let c = self.cursor_pos;
- self.children[c].process_event(event, context)
- || self.children.iter_mut().enumerate().any(|(idx, child)| {
- if idx == c {
- return false;
- }
- child.process_event(event, context)
- })
+ 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 {
+ return false;
+ }
+ 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;
}
diff --git a/src/components/utilities/widgets.rs b/src/components/utilities/widgets.rs
index 0a666eec..b9167c60 100644
--- a/src/components/utilities/widgets.rs
+++ b/src/components/utilities/widgets.rs
@@ -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();