diff --git a/gui/src/app/mod.rs b/gui/src/app/mod.rs index acae0d6c..4f65b62f 100644 --- a/gui/src/app/mod.rs +++ b/gui/src/app/mod.rs @@ -157,6 +157,8 @@ impl App { } fn set_current_panel(&mut self, menu: Menu) -> Command { + self.panels.current_mut().interrupt(); + match &menu { menu::Menu::TransactionPreSelected(txid) => { if let Ok(Some(tx)) = Handle::current().block_on(async { diff --git a/gui/src/app/state/mod.rs b/gui/src/app/state/mod.rs index 8033243e..4b1b38e6 100644 --- a/gui/src/app/state/mod.rs +++ b/gui/src/app/state/mod.rs @@ -47,6 +47,7 @@ pub trait State { fn subscription(&self) -> Subscription { Subscription::none() } + fn interrupt(&mut self) {} fn reload( &mut self, _daemon: Arc, diff --git a/gui/src/app/state/psbt.rs b/gui/src/app/state/psbt.rs index 62efe86e..0573f6bb 100644 --- a/gui/src/app/state/psbt.rs +++ b/gui/src/app/state/psbt.rs @@ -107,6 +107,10 @@ impl PsbtState { } } + pub fn interrupt(&mut self) { + self.action = None; + } + pub fn subscription(&self) -> Subscription { if let Some(action) = &self.action { action.as_ref().subscription() diff --git a/gui/src/app/state/psbts.rs b/gui/src/app/state/psbts.rs index 9b7a54fe..7960ee85 100644 --- a/gui/src/app/state/psbts.rs +++ b/gui/src/app/state/psbts.rs @@ -67,6 +67,10 @@ impl State for PsbtsPanel { } } + fn interrupt(&mut self) { + self.selected_tx = None; + } + fn update( &mut self, daemon: Arc, diff --git a/gui/src/app/state/spend/mod.rs b/gui/src/app/state/spend/mod.rs index 0c8aa579..ed5c6010 100644 --- a/gui/src/app/state/spend/mod.rs +++ b/gui/src/app/state/spend/mod.rs @@ -81,6 +81,10 @@ impl State for CreateSpendPanel { self.steps.get(self.current).unwrap().subscription() } + fn interrupt(&mut self) { + self.steps.get_mut(self.current).unwrap().interrupt(); + } + fn update( &mut self, daemon: Arc, diff --git a/gui/src/app/state/spend/step.rs b/gui/src/app/state/spend/step.rs index 17aeb8f7..b9baddac 100644 --- a/gui/src/app/state/spend/step.rs +++ b/gui/src/app/state/spend/step.rs @@ -61,6 +61,7 @@ pub trait Step { message: Message, ) -> Command; fn apply(&self, _draft: &mut TransactionDraft) {} + fn interrupt(&mut self) {} fn load(&mut self, _draft: &TransactionDraft) {} fn subscription(&self) -> Subscription { Subscription::none() @@ -776,6 +777,12 @@ impl Step for SaveSpend { )); } + fn interrupt(&mut self) { + if let Some((psbt_state, _)) = &mut self.spend { + psbt_state.interrupt() + } + } + fn subscription(&self) -> Subscription { if let Some((psbt_state, _)) = &self.spend { psbt_state.subscription()