mirror of
https://github.com/herdrdev/herdr.git
synced 2026-09-22 00:01:06 +00:00
@@ -92,21 +92,11 @@ impl ClientShellState {
|
||||
else {
|
||||
return false;
|
||||
};
|
||||
if !self.endpoint_is_online(&endpoint_id) {
|
||||
let label = self.endpoint_label(&endpoint_id).to_owned();
|
||||
self.receive_endpoint_unavailable(format!("{label} is reconnecting"));
|
||||
outcome.repaint = true;
|
||||
} else if endpoint_id == self.active_endpoint_id {
|
||||
self.push_endpoint_method(
|
||||
crate::api::schema::Method::PaneFocus(crate::api::schema::PaneTarget { pane_id }),
|
||||
outcome,
|
||||
);
|
||||
} else {
|
||||
outcome.actions.push(ClientShellAction::ActivateEndpoint {
|
||||
endpoint_id,
|
||||
target: Some(ClientEndpointFocusTarget::Pane(pane_id)),
|
||||
});
|
||||
}
|
||||
self.focus_or_activate(
|
||||
endpoint_id,
|
||||
ClientEndpointFocusTarget::Pane(pane_id),
|
||||
outcome,
|
||||
);
|
||||
true
|
||||
}
|
||||
|
||||
|
||||
@@ -149,6 +149,37 @@ fn switching_machines_preserves_aggregate_agent_scroll_and_visible_rows() {
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn local_agent_click_can_cancel_a_pending_remote_switch() {
|
||||
for reconnecting in [false, true] {
|
||||
let (mut state, remote) = state_with_scrollable_agents();
|
||||
assert!(state.activate_endpoint(remote, &mut ClientShellInput::default()));
|
||||
if reconnecting {
|
||||
state.mark_endpoint_disconnected(&ClientEndpointId::Local);
|
||||
}
|
||||
state.compose(100, 28).unwrap();
|
||||
let (rect, _, pane_id) = state
|
||||
.hits
|
||||
.endpoint_agents
|
||||
.iter()
|
||||
.find(|(_, endpoint, _)| endpoint.is_local())
|
||||
.unwrap()
|
||||
.clone();
|
||||
let outcome = state.handle_raw_events(vec![RawInputEvent::Mouse(MouseEvent {
|
||||
kind: MouseEventKind::Down(MouseButton::Left),
|
||||
column: rect.x + 2,
|
||||
row: rect.y,
|
||||
modifiers: KeyModifiers::NONE,
|
||||
})]);
|
||||
assert!(
|
||||
matches!(outcome.actions.as_slice(), [ClientShellAction::ActivateEndpoint {
|
||||
endpoint_id: ClientEndpointId::Local,
|
||||
target: Some(ClientEndpointFocusTarget::Pane(target)),
|
||||
}] if target == &pane_id)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn aggregate_agent_scroll_still_clamps_when_rows_shrink_on_activation() {
|
||||
let (mut state, remote) = state_with_scrollable_agents();
|
||||
|
||||
Reference in New Issue
Block a user