From 127c1323e3353ee0b68f9a7734d9b694da291d46 Mon Sep 17 00:00:00 2001 From: Leonard Hecker Date: Wed, 28 May 2025 00:19:09 +0200 Subject: [PATCH] Avoid changing file picker selection when typing --- src/bin/edit/draw_filepicker.rs | 6 ++---- src/bin/edit/main.rs | 1 + src/bin/edit/state.rs | 2 ++ 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/bin/edit/draw_filepicker.rs b/src/bin/edit/draw_filepicker.rs index 434804d4c375..ffd30f12ebbd 100644 --- a/src/bin/edit/draw_filepicker.rs +++ b/src/bin/edit/draw_filepicker.rs @@ -83,14 +83,12 @@ pub fn draw_file_picker(ctx: &mut Context, state: &mut State) { }, ); ctx.attr_background_rgba(ctx.indexed_alpha(IndexedColor::Black, 1, 4)); - ctx.next_block_id_mixin(state.file_picker_pending_dir.as_str().len() as u64); + ctx.next_block_id_mixin(state.file_picker_pending_dir_revision); { ctx.list_begin("files"); ctx.inherit_focus(); for entry in files { - match ctx - .list_item(state.file_picker_pending_name == entry.as_path(), entry.as_str()) - { + match ctx.list_item(false, entry.as_str()) { ListSelection::Unchanged => {} ListSelection::Selected => { state.file_picker_pending_name = entry.as_path().into() diff --git a/src/bin/edit/main.rs b/src/bin/edit/main.rs index 09f3de981953..e01764330628 100644 --- a/src/bin/edit/main.rs +++ b/src/bin/edit/main.rs @@ -280,6 +280,7 @@ fn handle_args(state: &mut State) -> apperr::Result { } state.file_picker_pending_dir = DisplayablePathBuf::from_path(cwd); + state.file_picker_pending_dir_revision = state.file_picker_pending_dir_revision.wrapping_add(1); Ok(false) } diff --git a/src/bin/edit/state.rs b/src/bin/edit/state.rs index bc8ba87d5e34..f9e3c45dc175 100644 --- a/src/bin/edit/state.rs +++ b/src/bin/edit/state.rs @@ -131,6 +131,7 @@ pub struct State { pub wants_file_picker: StateFilePicker, pub file_picker_pending_dir: DisplayablePathBuf, + pub file_picker_pending_dir_revision: u64, // Bumped every time `file_picker_pending_dir` changes. pub file_picker_pending_name: PathBuf, pub file_picker_entries: Option>, pub file_picker_overwrite_warning: Option, // The path the warning is about. @@ -175,6 +176,7 @@ impl State { wants_file_picker: StateFilePicker::None, file_picker_pending_dir: Default::default(), + file_picker_pending_dir_revision: 0, file_picker_pending_name: Default::default(), file_picker_entries: None, file_picker_overwrite_warning: None,