From 9f0cf796bb2af9771b40de7a33dc505377578852 Mon Sep 17 00:00:00 2001 From: shivam bansal Date: Thu, 16 Jul 2026 18:39:19 +0530 Subject: [PATCH] fix(browser): clear stale source-view interactions --- src/browser.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/browser.rs b/src/browser.rs index b2c07ac..eccf500 100644 --- a/src/browser.rs +++ b/src/browser.rs @@ -198,6 +198,10 @@ impl Browser { pub fn toggle_source(&mut self) { self.viewing_source = !self.viewing_source; self.scroll = 0; + self.link_focus = None; + self.active_form_line = None; + self.mouse_line = None; + self.hover_url = None; if self.viewing_source { self.lines = self.raw_html .lines() @@ -646,3 +650,27 @@ fn extract_title(html: &str) -> Option { None } } + +#[cfg(test)] +mod tests { + use super::Browser; + use crate::types::RenderedLine; + + #[test] + fn source_view_clears_interaction_indexes_for_replaced_lines() { + let mut browser = Browser::new(); + browser.raw_html = "source".to_string(); + browser.lines = vec![RenderedLine::plain("rendered")]; + browser.link_focus = Some(10); + browser.active_form_line = Some(10); + browser.mouse_line = Some(10); + browser.hover_url = Some("https://example.com".to_string()); + + browser.toggle_source(); + + assert!(browser.link_focus.is_none()); + assert!(browser.active_form_line.is_none()); + assert!(browser.mouse_line.is_none()); + assert!(browser.hover_url.is_none()); + } +}