From e8be471608b725f484b1c4d93aaf7e8508e96b65 Mon Sep 17 00:00:00 2001 From: kernelkind Date: Mon, 4 Aug 2025 16:09:27 -0400 Subject: [PATCH] set scroll offset when routing to thread Signed-off-by: kernelkind --- crates/notedeck_columns/src/actionbar.rs | 10 ++++++++- .../notedeck_columns/src/timeline/thread.rs | 4 +++- crates/notedeck_columns/src/ui/thread.rs | 21 +++++++++++++------ 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/crates/notedeck_columns/src/actionbar.rs b/crates/notedeck_columns/src/actionbar.rs index 53ff3723..4d358cea 100644 --- a/crates/notedeck_columns/src/actionbar.rs +++ b/crates/notedeck_columns/src/actionbar.rs @@ -93,7 +93,15 @@ fn execute_note_action( }; timeline_res = threads - .open(ndb, txn, pool, &thread_selection, preview, col) + .open( + ndb, + txn, + pool, + &thread_selection, + preview, + col, + scroll_offset, + ) .map(NotesOpenResult::Thread); let route = Route::Thread(thread_selection); diff --git a/crates/notedeck_columns/src/timeline/thread.rs b/crates/notedeck_columns/src/timeline/thread.rs index 1c4e8094..4fb7a1ab 100644 --- a/crates/notedeck_columns/src/timeline/thread.rs +++ b/crates/notedeck_columns/src/timeline/thread.rs @@ -154,6 +154,7 @@ pub struct Threads { impl Threads { /// Opening a thread. /// Similar to [[super::cache::TimelineCache::open]] + #[allow(clippy::too_many_arguments)] pub fn open( &mut self, ndb: &mut Ndb, @@ -162,6 +163,7 @@ impl Threads { thread: &ThreadSelection, new_scope: bool, col: usize, + scroll_offset: f32, ) -> Option { tracing::info!("Opening thread: {:?}", thread); let local_sub_filter = if let Some(selected) = &thread.selected_note { @@ -191,7 +193,7 @@ impl Threads { RawEntryMut::Vacant(entry) => { let id = NoteId::new(*selected_note_id); - let node = ThreadNode::new(ParentState::Unknown); + let node = ThreadNode::new(ParentState::Unknown).with_offset(scroll_offset); entry.insert(id, node); &local_sub_filter diff --git a/crates/notedeck_columns/src/ui/thread.rs b/crates/notedeck_columns/src/ui/thread.rs index 349df7ce..7e864c7f 100644 --- a/crates/notedeck_columns/src/ui/thread.rs +++ b/crates/notedeck_columns/src/ui/thread.rs @@ -52,17 +52,26 @@ impl<'a, 'd> ThreadView<'a, 'd> { .auto_shrink([false, false]) .scroll_bar_visibility(egui::scroll_area::ScrollBarVisibility::AlwaysVisible); - let offset_id = scroll_id.with(("scroll_offset", self.selected_note_id)); - - if let Some(offset) = ui.data(|i| i.get_temp::(offset_id)) { - scroll_area = scroll_area.vertical_scroll_offset(offset); + if let Some(thread) = self.threads.threads.get_mut(&self.selected_note_id) { + if let Some(new_offset) = thread.set_scroll_offset.take() { + scroll_area = scroll_area.vertical_scroll_offset(new_offset); + } } let output = scroll_area.show(ui, |ui| self.notes(ui, &txn)); - ui.data_mut(|d| d.insert_temp(offset_id, output.state.offset.y)); + let mut resp = output.inner; - output.inner + if let Some(NoteAction::Note { + note_id: _, + preview: _, + scroll_offset, + }) = &mut resp + { + *scroll_offset = output.state.offset.y; + } + + resp } fn notes(&mut self, ui: &mut egui::Ui, txn: &Transaction) -> Option {