diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-04-13 23:50:33 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-04-13 23:50:33 +0300 |
| commit | 37d52729100e9ed1e42ee71941899be79929cfd3 (patch) | |
| tree | d89c3e361815f0ac6fbffc4c3d9fc61fc42347ee /src | |
| parent | b24abba471db0fe618cedfe0ed1059ede8118c64 (diff) | |
fix highlight active workspace in collapsed sidebar
Diffstat (limited to 'src')
| -rw-r--r-- | src/ui.rs | 30 |
1 files changed, 29 insertions, 1 deletions
@@ -991,18 +991,23 @@ fn render_sidebar_collapsed(app: &AppState, frame: &mut Frame, area: Rect) { let (agg_state, agg_seen) = ws.aggregate_state(); let (icon, icon_style) = state_dot(agg_state, agg_seen, p); let is_selected = visible_idx == app.selected && is_navigating; + let is_active = Some(visible_idx) == app.active; let row_style = if is_selected { Style::default().bg(p.surface0) + } else if is_active { + Style::default().bg(p.surface_dim) } else { Style::default() }; let num_style = if is_selected { Style::default().fg(p.overlay1).bg(p.surface0) + } else if is_active { + Style::default().fg(p.text).bg(p.surface_dim) } else { Style::default().fg(p.overlay0) }; - if is_selected { + if is_selected || is_active { let buf = frame.buffer_mut(); for x in ws_area.x..ws_area.x + ws_area.width { buf[(x, y)].set_style(row_style); @@ -3435,6 +3440,29 @@ mod tests { } #[test] + fn collapsed_sidebar_keeps_active_workspace_highlight_in_terminal_mode() { + let mut app = crate::app::state::AppState::test_new(); + app.sidebar_collapsed = true; + app.workspaces = vec![Workspace::test_new("one"), Workspace::test_new("two")]; + app.active = Some(1); + app.selected = 0; + app.mode = Mode::Terminal; + + compute_view(&mut app, Rect::new(0, 0, 80, 20)); + + let backend = TestBackend::new(80, 20); + let mut terminal = Terminal::new(backend).unwrap(); + terminal.draw(|frame| render(&app, frame)).unwrap(); + let buffer = terminal.backend().buffer(); + + let (ws_area, _, _) = collapsed_sidebar_sections(app.view.sidebar_rect); + let active_row = ws_area.y + 1; + let active_style = buffer[(ws_area.x, active_row)].style(); + + assert_eq!(active_style.bg, Some(app.palette.surface_dim)); + } + + #[test] fn tab_bar_dims_auto_named_tabs_and_emphasizes_custom_tabs() { let mut app = crate::app::state::AppState::test_new(); let mut ws = Workspace::test_new("test"); |
