diff --git a/src/app/mod.rs b/src/app/mod.rs index c406671..4146b71 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -468,8 +468,8 @@ impl Ashell { terminal_marked_text: None, dragging_splitter: None, drag_split_origin: None, - sftp_panel_minimized: false, - sidebar_collapsed: false, + sftp_panel_minimized: config.sftp_panel_minimized(), + sidebar_collapsed: config.sidebar_collapsed(), collapsed_saved_scroll_handle: gpui::ScrollHandle::new(), prev_monitoring_size: None, status: "ready".into(), diff --git a/src/app/startup.rs b/src/app/startup.rs index 69283e8..255b4e1 100644 --- a/src/app/startup.rs +++ b/src/app/startup.rs @@ -290,6 +290,8 @@ pub(crate) fn open_main_window(cx: &mut App) { .map(|s| s.into()) .collect(); config.set_layout_state(Some(saved_bounds), Some(workspace_sizes), Some(body_sizes)); + config.set_sidebar_collapsed(view_clone.read(cx).sidebar_collapsed); + config.set_sftp_panel_minimized(view_clone.read(cx).sftp_panel_minimized); let _ = config.save(); true }); diff --git a/src/app/ui.rs b/src/app/ui.rs index 0f6685f..5dd6001 100644 --- a/src/app/ui.rs +++ b/src/app/ui.rs @@ -108,6 +108,9 @@ impl Ashell { }, ); } + self.config + .set_sftp_panel_minimized(self.sftp_panel_minimized); + let _ = self.config.save(); cx.notify(); } @@ -1522,6 +1525,8 @@ impl Ashell { .icon(IconName::PanelLeftClose) .on_click(cx.listener(|this, _, _, cx| { this.sidebar_collapsed = true; + this.config.set_sidebar_collapsed(true); + let _ = this.config.save(); cx.notify(); })), ) @@ -1751,6 +1756,8 @@ impl Ashell { .icon(IconName::PanelLeftOpen) .on_click(cx.listener(|this, _, _, cx| { this.sidebar_collapsed = false; + this.config.set_sidebar_collapsed(false); + let _ = this.config.save(); cx.notify(); })), ), @@ -2443,6 +2450,8 @@ impl Render for Ashell { .on_action(cx.listener(|this, _: &crate::NewSsh, window, cx| this.show_ssh_dialog(window, cx))) .on_action(cx.listener(|this, _: &crate::ToggleSidebar, _, cx| { this.sidebar_collapsed = !this.sidebar_collapsed; + this.config.set_sidebar_collapsed(this.sidebar_collapsed); + let _ = this.config.save(); cx.notify(); })) .on_action(cx.listener(|this, _: &crate::ToggleSftpZoom, window, cx| { diff --git a/src/session/config.rs b/src/session/config.rs index 1f1f18e..167020c 100644 --- a/src/session/config.rs +++ b/src/session/config.rs @@ -135,6 +135,10 @@ pub struct ConfigFile { #[serde(default = "default_monitoring_position")] pub monitoring_position: String, #[serde(default)] + pub sidebar_collapsed: bool, + #[serde(default)] + pub sftp_panel_minimized: bool, + #[serde(default)] pub key_bindings: std::collections::HashMap, } @@ -410,6 +414,22 @@ impl ConfigStore { self.cache.show_hidden_files = val; } + pub fn sidebar_collapsed(&self) -> bool { + self.cache.sidebar_collapsed + } + + pub fn set_sidebar_collapsed(&mut self, val: bool) { + self.cache.sidebar_collapsed = val; + } + + pub fn sftp_panel_minimized(&self) -> bool { + self.cache.sftp_panel_minimized + } + + pub fn set_sftp_panel_minimized(&mut self, val: bool) { + self.cache.sftp_panel_minimized = val; + } + pub fn get(&self, id: &str) -> Option<&Session> { self.cache.sessions.iter().find(|s| s.id == id) }