From 1b980eaa9d4cbc050b6b81525e4b6b72ae853be5 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Tue, 26 May 2026 15:49:07 +0300 Subject: feat: show clipboard copy feedback --- src/server/headless.rs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'src/server') diff --git a/src/server/headless.rs b/src/server/headless.rs index 4d9a2cc5..e65b741c 100644 --- a/src/server/headless.rs +++ b/src/server/headless.rs @@ -1150,8 +1150,8 @@ impl HeadlessServer { let data = base64::engine::general_purpose::STANDARD.encode(content.as_slice()); self.send_to_client(client_id, ServerMessage::Clipboard { data }); } - // ClipboardWrite doesn't change visual state — no render needed. - false + self.app.show_clipboard_feedback(); + true } AppEvent::StateChanged { pane_id, agent, .. } => { // Capture toast before handling. @@ -2426,6 +2426,16 @@ impl HeadlessServer { changed = true; } + if self + .app + .copy_feedback_deadline + .is_some_and(|deadline| now >= deadline) + { + self.app.copy_feedback_deadline = None; + self.app.state.copy_feedback = None; + changed = true; + } + if self .app .next_animation_tick @@ -4544,7 +4554,16 @@ next_tab = "" content: b"test".to_vec(), }); - assert!(!changed); + assert!(changed); + assert_eq!( + server + .app + .state + .copy_feedback + .as_ref() + .map(|feedback| feedback.message.as_str()), + Some("copied to clipboard") + ); match read_server_message( foreground_control_rx .recv_timeout(Duration::from_millis(100)) -- cgit v1.2.3