fix(tui): clear stale scrollbar drag state

This commit is contained in:
Hunter Bown
2026-05-07 15:17:08 -05:00
parent 245e409a20
commit b80d522f0e
3 changed files with 35 additions and 0 deletions
+1
View File
@@ -2467,6 +2467,7 @@ impl App {
self.viewport.pending_scroll_delta = 0;
self.viewport.transcript_selection.clear();
self.viewport.transcript_scrollbar_dragging = false;
self.viewport.last_transcript_area = None;
self.viewport.last_transcript_top = 0;
+2
View File
@@ -7338,6 +7338,8 @@ fn handle_mouse_event(app: &mut App, mouse: MouseEvent) -> Vec<ViewEvent> {
}
}
MouseEventKind::Down(MouseButton::Left) => {
app.viewport.transcript_scrollbar_dragging = false;
if mouse_hits_rect(mouse, app.viewport.jump_to_latest_button_area) {
app.scroll_to_bottom();
return Vec::new();
+32
View File
@@ -359,6 +359,38 @@ fn transcript_scrollbar_drag_maps_mouse_row_to_scroll_position() {
assert!(!app.viewport.transcript_scrollbar_dragging);
}
#[test]
fn new_left_down_clears_stale_transcript_scrollbar_drag() {
let mut app = create_test_app();
app.history = vec![HistoryCell::Assistant {
content: "alpha beta".to_string(),
streaming: false,
}];
app.resync_history_revisions();
app.viewport.last_transcript_area = Some(Rect {
x: 2,
y: 5,
width: 20,
height: 10,
});
app.viewport.last_transcript_visible = 10;
app.viewport.last_transcript_total = 110;
app.viewport.transcript_scrollbar_dragging = true;
let events = handle_mouse_event(
&mut app,
MouseEvent {
kind: MouseEventKind::Down(MouseButton::Left),
column: 3,
row: 5,
modifiers: KeyModifiers::NONE,
},
);
assert!(events.is_empty());
assert!(!app.viewport.transcript_scrollbar_dragging);
}
#[test]
fn right_click_opens_context_menu() {
let mut app = create_test_app();