Fix tab navigation to respect user choice and prevent jumping back to localhost
- Add user_navigated_away flag to track manual navigation - Only auto-switch to localhost if user hasn't manually navigated away - Reset flag when host disconnects to allow auto-selection - Preserves user's tab navigation choices while still prioritizing localhost initially
This commit is contained in:
parent
bf2f066029
commit
ca160c9627
@ -57,6 +57,8 @@ pub struct TuiApp {
|
|||||||
host_index: usize,
|
host_index: usize,
|
||||||
/// Should quit application
|
/// Should quit application
|
||||||
should_quit: bool,
|
should_quit: bool,
|
||||||
|
/// Track if user manually navigated away from localhost
|
||||||
|
user_navigated_away: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TuiApp {
|
impl TuiApp {
|
||||||
@ -67,6 +69,7 @@ impl TuiApp {
|
|||||||
available_hosts: Vec::new(),
|
available_hosts: Vec::new(),
|
||||||
host_index: 0,
|
host_index: 0,
|
||||||
should_quit: false,
|
should_quit: false,
|
||||||
|
user_navigated_away: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,22 +162,23 @@ impl TuiApp {
|
|||||||
|
|
||||||
self.available_hosts = sorted_hosts;
|
self.available_hosts = sorted_hosts;
|
||||||
|
|
||||||
// Always prioritize localhost if it becomes available, even if another host is selected
|
// Prioritize localhost if it becomes available, but respect user navigation
|
||||||
let localhost = gethostname::gethostname().to_string_lossy().to_string();
|
let localhost = gethostname::gethostname().to_string_lossy().to_string();
|
||||||
if !self.available_hosts.is_empty() {
|
if !self.available_hosts.is_empty() {
|
||||||
if self.available_hosts.contains(&localhost) {
|
if self.available_hosts.contains(&localhost) && !self.user_navigated_away {
|
||||||
// Localhost is available - always switch to it
|
// Localhost is available and user hasn't navigated away - switch to it
|
||||||
self.current_host = Some(localhost);
|
self.current_host = Some(localhost);
|
||||||
self.host_index = 0; // localhost is always first in sorted_hosts
|
self.host_index = 0; // localhost is always first in sorted_hosts
|
||||||
} else if self.current_host.is_none() {
|
} else if self.current_host.is_none() {
|
||||||
// No localhost, no current host - select first available
|
// No current host - select first available (which is localhost if available)
|
||||||
self.current_host = Some(self.available_hosts[0].clone());
|
self.current_host = Some(self.available_hosts[0].clone());
|
||||||
self.host_index = 0;
|
self.host_index = 0;
|
||||||
} else if let Some(ref current) = self.current_host {
|
} else if let Some(ref current) = self.current_host {
|
||||||
if !self.available_hosts.contains(current) {
|
if !self.available_hosts.contains(current) {
|
||||||
// Current host disconnected - select first available
|
// Current host disconnected - select first available and reset navigation flag
|
||||||
self.current_host = Some(self.available_hosts[0].clone());
|
self.current_host = Some(self.available_hosts[0].clone());
|
||||||
self.host_index = 0;
|
self.host_index = 0;
|
||||||
|
self.user_navigated_away = false; // Reset since we're forced to switch
|
||||||
} else if let Some(index) = self.available_hosts.iter().position(|h| h == current) {
|
} else if let Some(index) = self.available_hosts.iter().position(|h| h == current) {
|
||||||
// Update index for current host
|
// Update index for current host
|
||||||
self.host_index = index;
|
self.host_index = index;
|
||||||
@ -227,6 +231,17 @@ impl TuiApp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.current_host = Some(self.available_hosts[self.host_index].clone());
|
self.current_host = Some(self.available_hosts[self.host_index].clone());
|
||||||
|
|
||||||
|
// Check if user navigated away from localhost
|
||||||
|
let localhost = gethostname::gethostname().to_string_lossy().to_string();
|
||||||
|
if let Some(ref current) = self.current_host {
|
||||||
|
if current != &localhost {
|
||||||
|
self.user_navigated_away = true;
|
||||||
|
} else {
|
||||||
|
self.user_navigated_away = false; // User navigated back to localhost
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
info!("Switched to host: {}", self.current_host.as_ref().unwrap());
|
info!("Switched to host: {}", self.current_host.as_ref().unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user