aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-26 15:49:07 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-26 15:50:06 +0300
commit1b980eaa9d4cbc050b6b81525e4b6b72ae853be5 (patch)
tree48afc3595519c9e229e22528ecc229a66f9bd874 /src/server
parent57c880f0ebaa5011abc90f4e2fd4f84fc072ce35 (diff)
feat: show clipboard copy feedback
Diffstat (limited to 'src/server')
-rw-r--r--src/server/headless.rs25
1 files changed, 22 insertions, 3 deletions
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.
@@ -2428,6 +2428,16 @@ impl HeadlessServer {
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
.is_some_and(|deadline| now >= deadline)
{
@@ -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))