diff --git a/src/app/code_blocks.rs b/src/app/code_blocks.rs index 2dd7694..c2fa2d3 100644 --- a/src/app/code_blocks.rs +++ b/src/app/code_blocks.rs @@ -103,6 +103,6 @@ impl App { } pub(crate) fn highlighted_code_block(&self) -> Option { - self.code_select.or(self.hovered_code_block) + self.code_select } } diff --git a/src/app/content.rs b/src/app/content.rs index 25c6c72..ba6d944 100644 --- a/src/app/content.rs +++ b/src/app/content.rs @@ -48,7 +48,6 @@ impl App { self.hovered_link = None; self.set_code_blocks(code_blocks); self.code_select = None; - self.hovered_code_block = None; self.set_line_maps(line_number_map, source_line_map); self.refresh_static_caches(); } diff --git a/src/app/mod.rs b/src/app/mod.rs index a17af6b..f12443c 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -136,7 +136,6 @@ pub(crate) struct App { pub(crate) hovered_link: Option<(usize, usize)>, pub(crate) code_blocks: Vec, pub(crate) code_select: Option, - pub(crate) hovered_code_block: Option, code_block_flash: Option<(CodeBlockFlash, Instant)>, link_flash: Option<(LinkFlash, Instant)>, path_flash: Option<(PathFlash, Instant)>, @@ -291,7 +290,6 @@ impl App { hovered_link: None, code_blocks: Vec::new(), code_select: None, - hovered_code_block: None, code_block_flash: None, link_flash: None, path_flash: None, @@ -336,7 +334,6 @@ impl App { self.mouse_capture = !self.mouse_capture; if !self.mouse_capture { self.hovered_link = None; - self.hovered_code_block = None; self.hovered_toc_idx = None; self.scrollbar_dragging = false; } diff --git a/src/app/navigation.rs b/src/app/navigation.rs index d8c2fbc..99782a1 100644 --- a/src/app/navigation.rs +++ b/src/app/navigation.rs @@ -40,31 +40,26 @@ impl App { pub(crate) fn scroll_down(&mut self, n: usize) { self.reset_numkey_state(); self.scroll = (self.scroll + n).min(self.max_scroll()); - self.hovered_code_block = None; } pub(crate) fn scroll_up(&mut self, n: usize) { self.reset_numkey_state(); self.scroll = self.scroll.saturating_sub(n); - self.hovered_code_block = None; } pub(crate) fn scroll_top(&mut self) { self.reset_numkey_state(); self.scroll = 0; - self.hovered_code_block = None; } pub(crate) fn scroll_bottom(&mut self) { self.reset_numkey_state(); self.scroll = self.max_scroll(); - self.hovered_code_block = None; } pub(crate) fn scroll_to(&mut self, position: usize) { self.reset_numkey_state(); self.scroll = position.min(self.max_scroll()); - self.hovered_code_block = None; } pub(crate) fn toggle_toc(&mut self) { diff --git a/src/runtime/mouse.rs b/src/runtime/mouse.rs index ad0bcab..6f78d9b 100644 --- a/src/runtime/mouse.rs +++ b/src/runtime/mouse.rs @@ -157,19 +157,20 @@ pub(super) fn handle_mouse_event(app: &mut App, mouse: MouseEvent) -> bool { false } } else if is_on_scrollbar(app.content_area, mouse.column, mouse.row) { - app.exit_code_select_mode(); app.scrollbar_dragging = true; scrollbar_scroll_to(app, mouse.row); true } else if is_double_click { - if let Some(line_idx) = line_idx_at(app, mouse.column, mouse.row) { - if let Some(block_idx) = app.code_block_at_line(line_idx) { - app.copy_code_block_at(block_idx); - app.last_click = None; - return true; - } + let block_hit = line_idx_at(app, mouse.column, mouse.row) + .and_then(|line_idx| app.code_block_at_line(line_idx)); + if let Some(block_idx) = block_hit { + app.code_select = Some(block_idx); + app.copy_code_block_at(block_idx); + app.last_click = None; + true + } else { + false } - false } else { false } @@ -177,13 +178,11 @@ pub(super) fn handle_mouse_event(app: &mut App, mouse: MouseEvent) -> bool { MouseEventKind::Down(MouseButton::Middle | MouseButton::Right) if is_on_scrollbar(app.content_area, mouse.column, mouse.row) => { - app.exit_code_select_mode(); app.scrollbar_dragging = true; scrollbar_scroll_to(app, mouse.row); true } MouseEventKind::Drag(..) if app.scrollbar_dragging => { - app.exit_code_select_mode(); scrollbar_scroll_to(app, mouse.row); true } @@ -223,21 +222,7 @@ pub(super) fn handle_mouse_event(app: &mut App, mouse: MouseEvent) -> bool { app.hovered_toc_idx = new_toc_hover; } - let new_code_block_hover = line_idx_at(app, mouse.column, mouse.row) - .and_then(|line_idx| app.code_block_at_line(line_idx)); - let code_block_hover_changed = app.hovered_code_block != new_code_block_hover; - if code_block_hover_changed { - app.hovered_code_block = new_code_block_hover; - } - if app.code_select.is_some() { - if let Some(new_idx) = new_code_block_hover { - if app.code_select != Some(new_idx) { - app.code_select = Some(new_idx); - } - } - } - - scrollbar_changed || hover_changed || toc_hover_changed || code_block_hover_changed + scrollbar_changed || hover_changed || toc_hover_changed } _ => false, } diff --git a/src/tests/app.rs b/src/tests/app.rs index bdfac80..4ce5850 100644 --- a/src/tests/app.rs +++ b/src/tests/app.rs @@ -58,12 +58,10 @@ fn toggle_mouse_capture_off_resets_hover_and_drag_state() { parse_markdown("body", &ss, &theme, &test_md_theme(), false, true).into(); let mut app = App::new(lines, toc, "test".to_string(), false, false, None, None); app.hovered_link = Some((3, 0)); - app.hovered_code_block = Some(0); app.hovered_toc_idx = Some(2); app.scrollbar_dragging = true; app.toggle_mouse_capture(); assert_eq!(app.hovered_link, None); - assert_eq!(app.hovered_code_block, None); assert_eq!(app.hovered_toc_idx, None); assert!(!app.scrollbar_dragging); }