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 | 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 | 408 | let selected = tab.selected_entries(); |
| 401 | 409 | let filters = self.picker_config.mode.filters(); |
| 402 | 410 | |
@@ -904,6 +912,27 @@ impl App { | ||
| 904 | 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 | 936 | // Update status bar with new selection |
| 908 | 937 | self.update_status_bar(); |
| 909 | 938 | |
garfield/src/ui/picker_toolbar.rsmodified@@ -293,6 +293,13 @@ impl PickerToolbar { | ||
| 293 | 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 | 303 | /// Handle keyboard input for filename editing. Returns true if handled. |
| 297 | 304 | pub fn handle_key(&mut self, key: &Key) -> bool { |
| 298 | 305 | if !self.filename_editing { |