notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit 28c74bc838f1127e88b219315563056a3eb8542e
parent d5dfb0df435fb3030e39e0731ccf8823e0af30d4
Author: William Casarin <jb55@jb55.com>
Date:   Tue, 27 Jan 2026 08:19:02 -0800

dave: fix scroll ID conflict between chat and session list

Both ScrollAreas were using implicit IDs which conflicted when
rendered together in the classic view, preventing independent
scrolling. Added unique id_salt to each scroll area.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

Diffstat:
Mcrates/notedeck_dave/src/ui/dave.rs | 1+
Mcrates/notedeck_dave/src/ui/session_list.rs | 15++++++---------
2 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/crates/notedeck_dave/src/ui/dave.rs b/crates/notedeck_dave/src/ui/dave.rs @@ -172,6 +172,7 @@ impl<'a> DaveUi<'a> { .inner; let chat_response = egui::ScrollArea::vertical() + .id_salt("dave_chat_scroll") .stick_to_bottom(true) .auto_shrink([false; 2]) .show(ui, |ui| { diff --git a/crates/notedeck_dave/src/ui/session_list.rs b/crates/notedeck_dave/src/ui/session_list.rs @@ -3,6 +3,7 @@ use notedeck_ui::app_images; use crate::agent_status::AgentStatus; use crate::session::{SessionId, SessionManager}; +use crate::ui::keybind_hint::paint_keybind_hint; /// Actions that can be triggered from the session list UI #[derive(Debug, Clone)] @@ -37,6 +38,7 @@ impl<'a> SessionListUi<'a> { // Scrollable list of sessions egui::ScrollArea::vertical() + .id_salt("session_list_scroll") .auto_shrink([false; 2]) .show(ui, |ui| { if let Some(session_action) = self.sessions_list_ui(ui) { @@ -149,15 +151,10 @@ impl<'a> SessionListUi<'a> { // Draw shortcut hint on the left if available (only when Ctrl held) let text_start_x = if let Some(num) = shortcut_hint { let hint_text = format!("{}", num); - let hint_pos = rect.left_center() + egui::vec2(16.0, 0.0); - ui.painter().text( - hint_pos, - egui::Align2::LEFT_CENTER, - &hint_text, - egui::FontId::monospace(12.0), - ui.visuals().text_color().gamma_multiply(0.5), - ); - 32.0 + let hint_size = 18.0; + let hint_center = rect.left_center() + egui::vec2(16.0 + hint_size / 2.0, 0.0); + paint_keybind_hint(ui, hint_center, &hint_text, hint_size); + 16.0 + hint_size + 6.0 // padding + hint width + spacing } else { 12.0 // Leave room for status bar };