picker: fix save mode button enablement and filename population
- SHA
fe387b7b8682cb94a5930f868706bbbe445698b0- Parents
-
9eca12e - Tree
2272bce
fe387b7
fe387b7b8682cb94a5930f868706bbbe445698b09eca12e
2272bce| Status | File | + | - |
|---|---|---|---|
| M |
garfield/src/app.rs
|
29 | 0 |
| M |
garfield/src/ui/picker_toolbar.rs
|
7 | 0 |
garfield/src/app.rsmodified@@ -397,6 +397,14 @@ impl App { | |||
| 397 | return false; | 397 | return false; |
| 398 | }; | 398 | }; |
| 399 | 399 | ||
| 400 | + // In save mode, we need a non-empty filename (directory selection is automatic) | ||
| 401 | + if self.picker_config.mode.is_save_mode() { | ||
| 402 | + return self.picker_toolbar | ||
| 403 | + .as_ref() | ||
| 404 | + .map(|pt| !pt.filename().is_empty()) | ||
| 405 | + .unwrap_or(false); | ||
| 406 | + } | ||
| 407 | + | ||
| 400 | let selected = tab.selected_entries(); | 408 | let selected = tab.selected_entries(); |
| 401 | let filters = self.picker_config.mode.filters(); | 409 | let filters = self.picker_config.mode.filters(); |
| 402 | 410 | ||
@@ -904,6 +912,27 @@ impl App { | |||
| 904 | tab.on_click(pos, modifiers); | 912 | tab.on_click(pos, modifiers); |
| 905 | } | 913 | } |
| 906 | } | 914 | } |
| 915 | + | ||
| 916 | + // In save mode, populate filename when clicking a file | ||
| 917 | + if self.picker_config.mode.is_save_mode() { | ||
| 918 | + let filename_to_set = self.focused_pane() | ||
| 919 | + .and_then(|pane| pane.active_tab()) | ||
| 920 | + .and_then(|tab| { | ||
| 921 | + let selected = tab.selected_entries(); | ||
| 922 | + if selected.len() == 1 && !selected[0].is_dir() { | ||
| 923 | + Some(selected[0].name.clone()) | ||
| 924 | + } else { | ||
| 925 | + None | ||
| 926 | + } | ||
| 927 | + }); | ||
| 928 | + | ||
| 929 | + if let Some(filename) = filename_to_set { | ||
| 930 | + if let Some(ref mut pt) = self.picker_toolbar { | ||
| 931 | + pt.set_filename(&filename); | ||
| 932 | + } | ||
| 933 | + } | ||
| 934 | + } | ||
| 935 | + | ||
| 907 | // Update status bar with new selection | 936 | // Update status bar with new selection |
| 908 | self.update_status_bar(); | 937 | self.update_status_bar(); |
| 909 | 938 | ||
garfield/src/ui/picker_toolbar.rsmodified@@ -293,6 +293,13 @@ impl PickerToolbar { | |||
| 293 | &self.filename | 293 | &self.filename |
| 294 | } | 294 | } |
| 295 | 295 | ||
| 296 | + /// Set the filename (e.g., when clicking a file in save mode). | ||
| 297 | + pub fn set_filename(&mut self, filename: &str) { | ||
| 298 | + self.filename = filename.to_string(); | ||
| 299 | + self.filename_cursor = self.filename.len(); | ||
| 300 | + self.filename_selection_start = None; | ||
| 301 | + } | ||
| 302 | + | ||
| 296 | /// Handle keyboard input for filename editing. Returns true if handled. | 303 | /// Handle keyboard input for filename editing. Returns true if handled. |
| 297 | pub fn handle_key(&mut self, key: &Key) -> bool { | 304 | pub fn handle_key(&mut self, key: &Key) -> bool { |
| 298 | if !self.filename_editing { | 305 | if !self.filename_editing { |