aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/headless.rs35
-rw-r--r--src/server/render_stream.rs8
2 files changed, 38 insertions, 5 deletions
diff --git a/src/server/headless.rs b/src/server/headless.rs
index 7bd7abce..10df803d 100644
--- a/src/server/headless.rs
+++ b/src/server/headless.rs
@@ -1963,6 +1963,41 @@ mod tests {
}
#[tokio::test]
+ async fn virtual_render_hides_focused_pane_cursor_while_mobile_switcher_open() {
+ let mut state = AppState::test_new();
+ let mut ws = crate::workspace::Workspace::test_new("test");
+ let pane_id = ws.tabs[0].root_pane;
+ ws.tabs[0].runtimes.insert(
+ pane_id,
+ crate::pane::PaneRuntime::test_with_screen_bytes(20, 5, b"left"),
+ );
+
+ state.workspaces = vec![ws];
+ state.active = Some(0);
+ state.selected = 0;
+ state.mode = crate::app::Mode::Navigate;
+
+ let area = Rect::new(0, 0, 44, 24);
+ let (_buffer, cursor) =
+ crate::server::render_stream::render_virtual(&mut state, area, true);
+ let pane = state
+ .view
+ .pane_infos
+ .iter()
+ .find(|info| info.id == pane_id)
+ .expect("focused pane info");
+
+ assert_eq!(
+ cursor,
+ Some(CursorState {
+ x: pane.inner_rect.x + 4,
+ y: pane.inner_rect.y,
+ visible: false,
+ })
+ );
+ }
+
+ #[tokio::test]
async fn virtual_render_hides_focused_pane_cursor_while_scrolled_back() {
let mut state = AppState::test_new();
let mut ws = crate::workspace::Workspace::test_new("test");
diff --git a/src/server/render_stream.rs b/src/server/render_stream.rs
index 45542a7a..856a362f 100644
--- a/src/server/render_stream.rs
+++ b/src/server/render_stream.rs
@@ -246,10 +246,6 @@ pub(crate) fn visible_hyperlinks(app_state: &AppState) -> Vec<((u16, u16), Strin
}
fn focused_terminal_cursor(app_state: &AppState) -> Option<CursorState> {
- if app_state.mode != Mode::Terminal {
- return None;
- }
-
let ws_idx = app_state.active?;
let ws = app_state.workspaces.get(ws_idx)?;
let info = app_state
@@ -262,6 +258,8 @@ fn focused_terminal_cursor(app_state: &AppState) -> Option<CursorState> {
Some(CursorState {
x: cursor.x,
y: cursor.y,
- visible: cursor.visible && !crate::ui::pane_is_scrolled_back(rt),
+ visible: app_state.mode == Mode::Terminal
+ && cursor.visible
+ && !crate::ui::pane_is_scrolled_back(rt),
})
}