From 5deb7857db635596b0ed35381e27516f31be1488 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Fri, 29 Dec 2023 11:15:05 +0000 Subject: [PATCH] Prepare to pass a Client through to activity constructors. --- src/tui.rs | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/tui.rs b/src/tui.rs index 90f765d..35e7005 100644 --- a/src/tui.rs +++ b/src/tui.rs @@ -212,7 +212,6 @@ impl Tui { let result = tui.main_loop(); let _ = &tui.subthread_sender; // FIXME: this just suppresses a warning - let _ = &tui.client; // FIXME: this just suppresses a warning disable_raw_mode()?; stdout().execute(LeaveAlternateScreen)?; @@ -288,7 +287,8 @@ impl Tui { Event::Key(key) => { if key.kind == KeyEventKind::Press { for ourkey in Self::translate_keypress(key) { - match self.state.handle_keypress(ourkey) { + match self.state.handle_keypress( + ourkey, &mut self.client) { PhysicalAction::Beep => { Self::beep()? }, @@ -346,7 +346,9 @@ struct TuiLogicalState { activity_state: Box, } -fn new_activity_state(activity: Activity) -> Box { +fn new_activity_state(activity: Activity, _client: &mut Client) -> + Box +{ match activity { Activity::NonUtil(NonUtilityActivity::MainMenu) => main_menu(), Activity::Util(UtilityActivity::UtilsMenu) => utils_menu(), @@ -360,7 +362,10 @@ fn new_activity_state(activity: Activity) -> Box { impl TuiLogicalState { fn new() -> Self { let activity_stack = ActivityStack::new(); - let activity_state = new_activity_state(activity_stack.top()); + // It would be nice to construct this by calling + // new_activity_state, but we don't have a &mut Client to give + // it, and in this case we know we don't need one. + let activity_state = main_menu(); TuiLogicalState { activity_stack: activity_stack, @@ -390,7 +395,9 @@ impl TuiLogicalState { } } - fn handle_keypress(&mut self, key: OurKey) -> PhysicalAction { + fn handle_keypress(&mut self, key: OurKey, client: &mut Client) -> + PhysicalAction + { let logact = match key { // Central handling of [ESC]: it _always_ goes to the // utilities menu, from any UI context at all. @@ -407,18 +414,19 @@ impl TuiLogicalState { LogicalAction::NYI => PhysicalAction::Beep, LogicalAction::Goto(activity) => { self.activity_stack.goto(activity); - self.changed_activity(); + self.changed_activity(client); PhysicalAction::Nothing }, LogicalAction::Pop => { self.activity_stack.pop(); - self.changed_activity(); + self.changed_activity(client); PhysicalAction::Nothing }, } } - fn changed_activity(&mut self) { - self.activity_state = new_activity_state(self.activity_stack.top()); + fn changed_activity(&mut self, client: &mut Client) { + self.activity_state = new_activity_state( + self.activity_stack.top(), client); } } -- 2.30.2