commit ee38bcceef0d0924c91607d4e77e395e9f15244e
parent 40118d7f4e2e5171acd7ee97af8dac56f4d6628e
Author: William Casarin <jb55@jb55.com>
Date: Mon, 16 Feb 2026 17:15:11 -0800
fix scroll position when switching sessions
Use per-session scroll area ID so each session maintains its own
scroll state. Previously all sessions shared a static id_salt,
causing scroll to stay near the top after switching.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat:
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/crates/notedeck_dave/src/ui/dave.rs b/crates/notedeck_dave/src/ui/dave.rs
@@ -13,7 +13,7 @@ use crate::{
PermissionResponse, PermissionResponseType, QuestionAnswer, SubagentInfo, SubagentStatus,
ToolResult,
},
- session::PermissionMessageState,
+ session::{PermissionMessageState, SessionId},
tools::{PresentNotesCall, ToolCall, ToolCalls, ToolResponse},
};
use egui::{Align, Key, KeyboardShortcut, Layout, Modifiers};
@@ -34,6 +34,8 @@ pub struct DaveUi<'a> {
has_pending_permission: bool,
focus_requested: &'a mut bool,
plan_mode_active: bool,
+ /// Session ID for per-session scroll state
+ session_id: SessionId,
/// State for tentative permission response (waiting for message)
permission_message_state: PermissionMessageState,
/// State for AskUserQuestion responses (selected options per question)
@@ -132,6 +134,7 @@ pub enum DaveAction {
impl<'a> DaveUi<'a> {
pub fn new(
trial: bool,
+ session_id: SessionId,
chat: &'a [Message],
input: &'a mut String,
focus_requested: &'a mut bool,
@@ -139,6 +142,7 @@ impl<'a> DaveUi<'a> {
) -> Self {
DaveUi {
trial,
+ session_id,
chat,
input,
compact: false,
@@ -314,7 +318,7 @@ impl<'a> DaveUi<'a> {
}
let chat_response = egui::ScrollArea::vertical()
- .id_salt("dave_chat_scroll")
+ .id_salt(("dave_chat_scroll", self.session_id))
.stick_to_bottom(true)
.auto_shrink([false; 2])
.show(ui, |ui| {
diff --git a/crates/notedeck_dave/src/ui/mod.rs b/crates/notedeck_dave/src/ui/mod.rs
@@ -53,6 +53,7 @@ fn build_dave_ui<'a>(
let mut ui_builder = DaveUi::new(
model_config.trial,
+ session.id,
&session.chat,
&mut session.input,
&mut session.focus_requested,