gardesk/garfield / fe387b7

Browse files

picker: fix save mode button enablement and filename population

Authored by espadonne
SHA
fe387b7b8682cb94a5930f868706bbbe445698b0
Parents
9eca12e
Tree
2272bce

2 changed files

StatusFile+-
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 {
397397
             return false;
398398
         };
399399
 
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
+
400408
         let selected = tab.selected_entries();
401409
         let filters = self.picker_config.mode.filters();
402410
 
@@ -904,6 +912,27 @@ impl App {
904912
                     tab.on_click(pos, modifiers);
905913
                 }
906914
             }
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
+
907936
             // Update status bar with new selection
908937
             self.update_status_bar();
909938
 
garfield/src/ui/picker_toolbar.rsmodified
@@ -293,6 +293,13 @@ impl PickerToolbar {
293293
         &self.filename
294294
     }
295295
 
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
+
296303
     /// Handle keyboard input for filename editing. Returns true if handled.
297304
     pub fn handle_key(&mut self, key: &Key) -> bool {
298305
         if !self.filename_editing {