diff --git a/src/ui/activities/filetransfer_activity/input.rs b/src/ui/activities/filetransfer_activity/input.rs index bbbde0a..01eeefc 100644 --- a/src/ui/activities/filetransfer_activity/input.rs +++ b/src/ui/activities/filetransfer_activity/input.rs @@ -19,7 +19,10 @@ * */ -use super::{DialogCallback, DialogYesNoOption, FileExplorerTab, FileTransferActivity, FsEntry, InputEvent, InputField, InputMode, LogLevel, OnInputSubmitCallback, PopupType}; +use super::{ + DialogCallback, DialogYesNoOption, FileExplorerTab, FileTransferActivity, FsEntry, InputEvent, + InputField, InputMode, LogLevel, OnInputSubmitCallback, PopupType, +}; use crossterm::event::{KeyCode, KeyModifiers}; use std::path::PathBuf; @@ -72,7 +75,7 @@ impl FileTransferActivity { KeyCode::Esc => { // Handle quit event // Create quit prompt dialog - self.input_mode = self.create_quit_popup(); + self.input_mode = self.create_disconnect_popup(); } KeyCode::Tab => self.switch_input_field(), // switch tab KeyCode::Right => self.tab = FileExplorerTab::Remote, // switch to right tab @@ -172,6 +175,12 @@ impl FileTransferActivity { } } KeyCode::Char(ch) => match ch { + 'q' | 'Q' => { + if key.modifiers.intersects(KeyModifiers::CONTROL) { + // Create quit prompt dialog + self.input_mode = self.create_quit_popup(); + } + } 'g' | 'G' => { // Goto // If ctrl is enabled... @@ -273,7 +282,7 @@ impl FileTransferActivity { KeyCode::Esc => { // Handle quit event // Create quit prompt dialog - self.input_mode = self.create_quit_popup(); + self.input_mode = self.create_disconnect_popup(); } KeyCode::Tab => self.switch_input_field(), // switch tab KeyCode::Left => self.tab = FileExplorerTab::Local, // switch to local tab @@ -367,6 +376,12 @@ impl FileTransferActivity { } } KeyCode::Char(ch) => match ch { + 'q' | 'Q' => { + if key.modifiers.intersects(KeyModifiers::CONTROL) { + // Create quit prompt dialog + self.input_mode = self.create_quit_popup(); + } + } 'g' | 'G' => { // Goto // If ctrl is enabled... @@ -470,7 +485,7 @@ impl FileTransferActivity { KeyCode::Esc => { // Handle quit event // Create quit prompt dialog - self.input_mode = self.create_quit_popup(); + self.input_mode = self.create_disconnect_popup(); } KeyCode::Tab => self.switch_input_field(), // switch tab KeyCode::Down => { @@ -506,6 +521,15 @@ impl FileTransferActivity { self.log_index = self.log_index + records_block; // Increase by `records_block` } } + KeyCode::Char(ch) => match ch { + 'q' | 'Q' => { + if key.modifiers.intersects(KeyModifiers::CONTROL) { + // Create quit prompt dialog + self.input_mode = self.create_quit_popup(); + } + } + _ => { /* Nothing to do */ } + }, _ => { /* Nothing to do */ } } } diff --git a/src/ui/activities/filetransfer_activity/layout.rs b/src/ui/activities/filetransfer_activity/layout.rs index 891acd7..235c0fb 100644 --- a/src/ui/activities/filetransfer_activity/layout.rs +++ b/src/ui/activities/filetransfer_activity/layout.rs @@ -387,7 +387,7 @@ impl FileTransferActivity { .add_modifier(Modifier::BOLD), ), Span::raw(" "), - Span::raw("quit"), + Span::raw("disconnect"), ])), ListItem::new(Spans::from(vec![ Span::styled( @@ -477,6 +477,17 @@ impl FileTransferActivity { Span::raw(" "), Span::raw("goto path"), ])), + ListItem::new(Spans::from(vec![ + Span::styled( + "", + Style::default() + .bg(Color::Cyan) + .fg(Color::White) + .add_modifier(Modifier::BOLD), + ), + Span::raw(" "), + Span::raw("Quit TermSCP"), + ])), ListItem::new(Spans::from(vec![ Span::styled( "", diff --git a/src/ui/activities/filetransfer_activity/misc.rs b/src/ui/activities/filetransfer_activity/misc.rs index 1a777ff..5412c8e 100644 --- a/src/ui/activities/filetransfer_activity/misc.rs +++ b/src/ui/activities/filetransfer_activity/misc.rs @@ -38,13 +38,24 @@ impl FileTransferActivity { self.log_index = 0; } + /// ### create_quit_popup + /// + /// Create quit popup input mode (since must be shared between different input handlers) + pub(super) fn create_disconnect_popup(&mut self) -> InputMode { + InputMode::Popup(PopupType::YesNo( + String::from("Are you sure you want to disconnect?"), + FileTransferActivity::disconnect, + FileTransferActivity::callback_nothing_to_do, + )) + } + /// ### create_quit_popup /// /// Create quit popup input mode (since must be shared between different input handlers) pub(super) fn create_quit_popup(&mut self) -> InputMode { InputMode::Popup(PopupType::YesNo( String::from("Are you sure you want to quit?"), - FileTransferActivity::disconnect, + FileTransferActivity::disconnect_and_quit, FileTransferActivity::callback_nothing_to_do, )) } diff --git a/src/ui/activities/filetransfer_activity/session.rs b/src/ui/activities/filetransfer_activity/session.rs index baa6be2..be06e71 100644 --- a/src/ui/activities/filetransfer_activity/session.rs +++ b/src/ui/activities/filetransfer_activity/session.rs @@ -76,6 +76,14 @@ impl FileTransferActivity { self.disconnected = true; } + /// ### disconnect_and_quit + /// + /// disconnect from remote and then quit + pub(super) fn disconnect_and_quit(&mut self) { + self.disconnect(); + self.quit = true; + } + /// ### reload_remote_dir /// /// Reload remote directory entries